One-Way Hash,即单向哈希函数算法,就是无法根据求得的hash值通过简单的逆运算就得到原来的字符串。
/**
* One Way Hash
* 构造初始化
*/
function oneWayHash(){
// init cryptTable
let seed = 0x0010000,
temp1,
temp2;
this.cryptTable = [];
// 生成一个长度为0x500(合10进制数:1280)的数组cryptTable
for (let index1 = 0;index1 < 0x100; index1++){
for (let index2 = index1, i = 0; i < 5; i++, index2 += 0x100) {
seed = (seed * 125 + 3) % 0x2AAAAB;
temp1 = (seed & 0xFFFF) << 0x10;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp2 = (seed & 0xFFFF);
this.cryptTable[index2] = ( temp1 | temp2 );
}
}
}
/**
* getHash
*
* 获取HashCode
* str:要进行哈希计算的字符串
*
*/
oneWayHash.prototype.getHash = function(str, dwHashType){
str = str.toString();
let seed1 = 0x7FED7FED,
seed2 = 0xEEEEEEEE,
len = str.length,
char = '';
for (let i = 0; i < len; i++) {
char = str[i].toUpperCase();
seed1 = this.cryptTable[dwHashType<<8 + char] ^ (seed1 + seed2);
sedd2 = char + seed1 + seed2 + (seed2<<5) + 3;
}
return seed1;
}
测试
let str = 'http://blog.csdn.net/liebert/article/details/79645315',
hash = new oneWayHash();
console.log(hash.getHash(str, 1));
网友评论