У меня есть функция JavaScript, которую я пытаюсь преобразовать в PHP, она использует библиотеку CryptoJS, в частности, components/enc-base64-min.js
а также rollups/md5.js
, Их можно найти Вот.
В этом немного кода
// Let's say str = 'hello';
var md5 = CryptoJS.MD5(str);
md5 = md5.toString(CryptoJS.enc.Base64);
// md5 outputs "XUFAKrxLKna5cZ2REBfFkg=="
Я предположил str
переменная хешируется с использованием md5, затем кодируется в Base64, поэтому я попробовал этот простой код
$md5 = md5($str);
$md5 = base64_encode($md5);
// md5 outputs "MmZjMGE0MzNiMjg4MDNlNWI5NzkwNzgyZTRkNzdmMjI="
Затем я попытался проверить оба вывода, похоже, что вывод JS даже не является допустимой строкой Base64.
Чтобы понять дальше, я попытался найти toString()
параметр из W3Schools, но это не имеет смысла для меня, согласно ссылке параметр должен быть целым числом (2, 8 или 16), то почему CryptoJS.enc.Base64
используется вместо?
Моя цель здесь не в том, чтобы создать правильную строку в кодировке base64 с использованием JS, а в том же выводе, используя PHP.
РНР md5()
с одним параметром возвращает хеш md5 как шестнадцатеричная строка.
Вместо этого вы хотите, чтобы необработанные байты были закодированы в Base64, поэтому вы должны передать необязательный параметр $raw_output
слишком md5()
(установлен в true
)
$md5 = md5($str, true);
Других решений пока нет …