javascript实现OneWayHash算法

2018-03-21  本文已影响0人  _shen

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));
上一篇下一篇

猜你喜欢

热点阅读