当我通过 SHA1 运行字符串时的值与使用 .charCodeAt() 检查它时的值不同
Different values when I run a string through SHA1 than when I inspect it with .charCodeAt()
我从这个奇怪的场景开始,之后有人指出我实际上得到了正确的哈希,但输入字符串的编码在某种程度上是错误的。
所以我挖得更深了。 我的 Node.js VM 中有此字符串s
。 REPL:
> s
':"? O'
> s.charAt(2)
'?'
> s.charCodeAt(2)
10047
> var c = s.charAt(2)
> c.charCodeAt()
10047
仅凭这一点,我就认为字符串本身没有任何问题,只是我的终端在Windows XP上显示它(cmd.exe时遇到问题)。
但是,请查看我的 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.
这是怎么回事?
进行更新时,缓冲区是默认类型。因此,在给出字符串时,您必须显式传递它。
> var h = crypto.createHash('sha1');
> h.update(String.fromCharCode(10047),'utf8').digest('hex');
'902c43163c965fb0cf4c276f9b660c97a22fb355'
> var h = crypto.createHash('sha1');
> h.update(String.fromCharCode(63),'utf8').digest('hex');
'5bab61eb53176449e25c2c82f172b82cb13ffb9d'
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 如何检查管道中未定义的项目
- 主干-不管怎样,检查事件以前是否绑定过
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 递归使用 eval() 是检查程序执行的好方法吗?
- 检查onsubmit doenst work jquery contactform上的函数
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- API密钥使用和检查示例
- 如何让程序检查所选单词中是否有按键
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何检查字符串的一部分与数组匹配
- Jquery如何检查今天的时间大于使用给定时间
- 使用javascript反复检查用户在facebook上的登录状态
- 使用 jQuery 检查所有值是否为空或已填充
- 使用Javascript使用数组检查文本框中的值
- JavaScript代码未正确检查ajax请求
- 如何检查 charCodeAt() 是否可配置
- 当我通过 SHA1 运行字符串时的值与使用 .charCodeAt() 检查它时的值不同