设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
查看: 1322|回复: 0

[讨论] JS实现简单的HASH算法

[复制链接]
发表于 2016-9-3 08:55:05 | 显示全部楼层 |阅读模式
本帖最后由 Rimifon 于 2016-9-7 10:23 编辑
  1. function hash(str) {
  2.         str += "";
  3.         var arr = new Array, len = str.length;
  4.         var arg = Math.SQRT2.toFixed(9) - 0;
  5.         forEach(function(x) { arr[x] = 0; });
  6.         for(var i = 0; i < str.length; i++) calc(str.charCodeAt(i));
  7.         forEach(function(x){
  8.                 arr[x] = arr[x].toString(16);
  9.                 if(arr[x].length < 2) arr[x] = "0" + arr[x];
  10.         });
  11.         arr.reverse();
  12.         return arr.join("");
  13.         function calc(nmb)  {
  14.                 var c = nmb & 255, next = nmb >> 8;
  15.                 forEach(function(x) {
  16.                         var h = (x ? arr[x - 1] : 0) + arr[x] + x + len + c;
  17.                         h += (h / arg).toFixed(9).slice(-3) - 0;
  18.                         arr[x] = h & 255;
  19.                 });
  20.                 if(next > 0) calc(next);
  21.         }
  22.         function forEach(func) { for(var i = 0; i < 16; i++) func(i); }
  23. }
  24. // 测试结果
  25. console.log(hash("\x00"));
  26. //"f66c78ed57fe3b83eb7bfc5fcf29060e"
  27. console.log(hash("\x01"));
  28. //"5020f05de58d937d38a33b86f6502d35"
  29. console.log(hash("\x02"));
  30. //"4493772230d4090cb79e78f34680455b"
  31. console.log(hash("\x00\x00"));
  32. //"49cf24f9948663e02a919e18d1c40707"
复制代码
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

小黑屋|手机版|Archiver|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445   鄂公网安备 42011102000433号

GMT+8, 2017-9-25 06:50 , Processed in 0.102528 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表