Не могли бы вы предложить способ получить в javascript тот же результат, что и функция md5_base64
perl? В моей текущей среде js есть функции md5
и base64encode
, но я не уверен, как их правильно использовать.Эмуляция функции md5_base64 perl в javascript
Я пытался написать что-то вроде этого, но результат отличается от языка Perl:
function hex2str(str) {
var res = '';
for (var i = 0; i < str.length; i += 2) {
res += String.fromCharCode(parseInt(str.substr(i, 2), 16));
}
return res;
}
var md5res = md5('test'); // '098f6bcd4621d373cade4e832627b4f6'
var token = base64encode(hex2str(md5('test'))); // got 'CcKPa8ONRiHDk3PDisOeTsKDJifCtMO2'
В Perl:
#!/usr/bin/perl
use Digest::MD5 qw{md5_base64};
print md5_base64("test"); // 'CY9rzUYh03PK3k6DJie09g'
Просьба отобразить вывод 'md5 ('test')' из вашего JS-кода. Ваша функция 'hex2str' будет выглядеть нормально - для получения правильного вывода MD5 должен быть' 098f6bcd4621d373cade4e832627b4f6', и я подтвердил, что 'window.btoa (hex2str ('098f6bcd4621d373cade4e832627b4f6)) приводит к тому же результату, что и ваш код Perl. – Alnitak
Да, выход md5 - «098f6bcd4621d373cade4e832627b4f6», добавленный в код. Похож, что 'base64encode' возвращает неверный результат. – accme
Из-за кодировки UTF-16 ваша функция 'hex2str' неверна. –