2014-09-10 2 views
0

Не могли бы вы предложить способ получить в 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' 
+0

Просьба отобразить вывод 'md5 ('test')' из вашего JS-кода. Ваша функция 'hex2str' будет выглядеть нормально - для получения правильного вывода MD5 должен быть' 098f6bcd4621d373cade4e832627b4f6', и я подтвердил, что 'window.btoa (hex2str ('098f6bcd4621d373cade4e832627b4f6)) приводит к тому же результату, что и ваш код Perl. – Alnitak

+0

Да, выход md5 - «098f6bcd4621d373cade4e832627b4f6», добавленный в код. Похож, что 'base64encode' возвращает неверный результат. – accme

+0

Из-за кодировки UTF-16 ваша функция 'hex2str' неверна. –

ответ

0

Проверьте выход md5() и base64encode() отдельно.

Выходной сигнал должен быть 098f6bcd4621d373cade4e832627b4f6. Если вы работаете в браузере, вы также можете использовать window.btoa() в качестве функции кодирования Base64.

Я отдельно проверил, что window.btoa(hex2str('098f6bcd4621d373cade4e832627b4f6')) производит такой же вывод, как ваш код Perl (кроме того, что включает в себя некоторые window.btoa== отступов на конце, чтобы сделать выходной сигнал кратен 4 байта, согласно спецификации Base64).

Смежные вопросы