Преобразование Ruby SHA в JavaScript - PullRequest
3 голосов
/ 18 октября 2011

У меня есть этот метод на ruby, который преобразует строку в зашифрованный код SHA, и я хотел бы знать, возможно ли каким-то образом добиться этого с помощью javascript? Дело в том, что я не знаю точно, каковы конфигурации для этого SHA (я думаю, что это 512, но я не уверен, я пробовал несколько онлайн-инструментов javascript , но я не смог добиться того же результат)

require 'digest'
require 'iconv'
word = 'testing'
puts Digest::SHA2.new(512).hexdigest(Iconv.conv('UTF-16LE','ISO-8859-15', word))

#=> 6e42b2c2a6351036b78384212774135d99d849da3066264983e495b5f74dc922e3d361b8ea9c8527169757233ed0bd4e56b2c42aab0a21bbcca67219dc53b472

Возможно, зная, какие именно конфигурации используются в описанном выше методе, мне будет проще найти его в javascript?

Заранее спасибо


На всякий случай, если кому-то нужен этот метод для преобразования строки в шестнадцатеричный код UTF-16, вот он:

function toHex(str) {
    var group = [], i;

    for (i = 0; i < str.length; i += 1) {
        group.push(str.charCodeAt(i).toString(16));
    }

    return group.join('00') + '00';
}

1 Ответ

2 голосов
/ 18 октября 2011

Причина, по которой вы получаете разные результаты, заключается в том, что код Ruby преобразует 'testing' в UTF-16, а в примере jsSHA используется ASCII.Если вы расширите «тестирование» до 16-битного Unicode, вы получите "740065007300740069006e006700" в шестнадцатеричном формате, что дает тот же ответ, что и в Ruby.Конечно, вам также нужно установить SHA-512, как вы упомянули.

...