javascript — выдает тот же результат, что и CryptoJS.enc.Base64, используя переполнение стека

У меня есть функция 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.

4

Решение

РНР md5() с одним параметром возвращает хеш md5 как шестнадцатеричная строка.

Вместо этого вы хотите, чтобы необработанные байты были закодированы в Base64, поэтому вы должны передать необязательный параметр $raw_output слишком md5() (установлен в true)

$md5 = md5($str, true);

http://php.net/manual/it/function.md5.php

4

Другие решения

Других решений пока нет …