Я начал с this bizarre scenario, после чего кто-то указал, что на самом деле я получаю правильный хеш, но кодировка входной строки была чем-то неправильным ,Различные значения, когда я запускаю строку через SHA1, чем когда я проверяю ее с помощью .charCodeAt()
Итак, я углубился глубже. У меня есть эта строка s
в моей Node.js VM. РЕПЛ:
> s
':"? O'
> s.charAt(2)
'?'
> s.charCodeAt(2)
10047
> var c = s.charAt(2)
> c.charCodeAt()
10047
От одного этого, я предположил бы, что нет ничего плохого в том самом, так что мой терминал, имеющий проблемы с отображением его (cmd.exe на Windows XP) строки.
Однако, посмотрите на мою функцию SHA1 и что происходит, когда я пытаюсь применить его:
function SHA1(m){
var h = crypto.createHash('sha1');
h.update(m);
return h.digest('hex');
}
> SHA1(c)
'5bab61eb53176449e25c2c82f172b82cb13ffb9d'
Интересно, что даже если я построить его вручную из элемент кода, это все еще портит его:
> SHA1(String.fromCharCode(10047)
'5bab61eb53176449e25c2c82f172b82cb13ffb9d'
> SHA1(String.fromCharCode(63))
'5bab61eb53176449e25c2c82f172b82cb13ffb9d'
This seems to happen in Chrome with Rusha, as well.
Что здесь происходит?
я получить целый новый 'sha1' хэш, если я передать' .update (String.fromCharCode (100047, «utf8») 'может быть, вы должны попробовать. – Gntem
GeoPhoenix правильно, давая строку«UTF- 8 'необходимо, потому что по умолчанию это буфер. – user568109
'.update (String.fromCharCode (100047),' utf8 ')' получил синтаксическую ошибку при первом комментарии. – Gntem