Javascript 为什么我对crypto.sublt.digest的实现会导致等长字符串的等效十六进制哈希?
以下代码改编自这两个来源:Javascript 为什么我对crypto.sublt.digest的实现会导致等长字符串的等效十六进制哈希?,javascript,hash,cryptography,sha256,webcrypto-api,Javascript,Hash,Cryptography,Sha256,Webcrypto Api,以下代码改编自这两个来源: (函数(){ “严格使用”; var crypto=window.crypto | | window.msCrypto; if(typeof crypto.division==“未定义”){ 返回; } 函数转换器StringToArrayBuffer(str){ var strLength=str.length,buffer=newarraybuffer(strLength),i=0; 而(i
(函数(){
“严格使用”;
var crypto=window.crypto | | window.msCrypto;
if(typeof crypto.division==“未定义”){
返回;
}
函数转换器StringToArrayBuffer(str){
var strLength=str.length,buffer=newarraybuffer(strLength),i=0;
而(i
使用sha256.digest(“这个字符串”).then(函数(x){console.log(x)})然后(函数(x){console.log(x)})代码>在Chrome或Firefox控制台中运行时生成相同的十六进制字符串
事实上,任何两个长度相同的字符串都具有相同的十六进制表示形式
我读过的所有资料都表明,拥有两个相等的哈希值是很少见的。这意味着我做错了什么。我不知道那是什么。好吧,我终于弄明白了
根据MDN,不能直接将值分配给ArrayBuffer
相反,您必须使用Uint8Array、Uint16Array、DataView等为ArrayBuffer赋值
所以我改变了
function convertStringToArrayBuffer (str) {
var strLength = str.length, buffer = new ArrayBuffer(strLength), i = 0;
while (i < strLength) {
buffer[i] = str.charCodeAt(i);
i += 1;
}
return buffer;
}
函数convertStringToArrayBuffer(str){
var strLength=str.length,buffer=newarraybuffer(strLength),i=0;
而(i
到
函数convertStringToArrayBuffer(str){
var strLength=str.length,buffer=newuint8array(strLength),i=0;
而(i
瞧D
等长字符串不再具有匹配的哈希
function convertStringToArrayBuffer (str) {
var strLength = str.length, buffer = new ArrayBuffer(strLength), i = 0;
while (i < strLength) {
buffer[i] = str.charCodeAt(i);
i += 1;
}
return buffer;
}
function convertStringToArrayBuffer (str) {
var strLength = str.length, buffer = new Uint8Array(strLength), i = 0;
while (i < strLength) {
buffer[i] = str.charCodeAt(i);
i += 1;
}
return buffer;
}