1. function encodeUTF8(s) {
  2. var i, r = [], c, x;
  3. for (i = 0; i < s.length; i++)
  4. if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
  5. else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
  6. else {
  7. if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
  8. c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
  9. r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
  10. else r.push(0xE0 + (c >> 12 & 0xF));
  11. r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
  12. };
  13. return r;
  14. }
  15.  
  16. // 字符串加密成 hex 字符串
  17. function sha1(s) {
  18. var data = new Uint8Array(encodeUTF8(s))
  19. var i, j, t;
  20. var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
  21. s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
  22. for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
  23. s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
  24. s[l - 1] = data.length << 3;
  25. var w = [], f = [
  26. function () { return m[1] & m[2] | ~m[1] & m[3]; },
  27. function () { return m[1] ^ m[2] ^ m[3]; },
  28. function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
  29. function () { return m[1] ^ m[2] ^ m[3]; }
  30. ], rol = function (n, c) { return n << c | n >>> (32 - c); },
  31. k = [1518500249, 1859775393, -1894007588, -899497514],
  32. m = [1732584193, -271733879, null, null, -1009589776];
  33. m[2] = ~m[0], m[3] = ~m[1];
  34. for (i = 0; i < s.length; i += 16) {
  35. var o = m.slice(0);
  36. for (j = 0; j < 80; j++)
  37. w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
  38. t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
  39. m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
  40. for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
  41. };
  42. t = new DataView(new Uint32Array(m).buffer);
  43. for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);
  44.  
  45. var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
  46. return (e < 16 ? "0" : "") + e.toString(16);
  47. }).join("");
  48. return hex;
  49. }

sha1.js的更多相关文章

  1. rsa && sha1 js code

    jsbn.js /* * Copyright (c) 2003-2005 Tom Wu * All Rights Reserved. * * Permission is hereby granted, ...

  2. Js中 md5 sha1 base64 加密

    js的3中加密方式: .sha1加密,加密性高 调用: var sha = hex_sha1(str); .base64加密 调用: var b = new Base64(); var str = b ...

  3. JS实现的base64加密、md5加密及sha1加密详解

    1.base64加密 在页面中引入base64.js文件,调用方法为: <!DOCTYPE HTML> <html> <head> <meta charset ...

  4. js实现md5加密sha1加密等

    1.base64加密 在页面中引入base64.js文件,调用方法为: <!DOCTYPE HTML> <html> <head> <meta charset ...

  5. js实现密码加密

    http://www.cnblogs.com/mofish/archive/2012/02/25/2367858.html 1.base64加密 在页面中引入base64.js文件,调用方法为: &l ...

  6. 微信支付JS API使用心得

    微信的接口真的很坑爹,只返回成功或失败,从来不会告诉你为什么失败.这个微信支付的js接口也是调了一个下午才成功,期间踩了不少坑,在这里总结一下,而且把支付接口封装成了一个js文件,这样以后调用就很方便 ...

  7. 怎样调通微信支付及微信发货通知接口(Js API)

    怎样调通微信支付及微信发货通知接口(Js API) 微信支付提供了一个支付測试页面,微信支付正式使用须要測通支付.发货通知接口 .告警接口.维权接口.告警接口.维权接口非常easy.支付界面调通也相对 ...

  8. js加密

    在项目中,经常需要使用加密来保障数据的安全性,虽然可以通过在后台加密再传给前台,但这样无疑会增加后台的服务器的压力.所以在js中使用加密算法也就应运而生了. 一.base64加密 需要引入base64 ...

  9. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

随机推荐

  1. 【转】MOCK方法介绍

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://baidutech.blog.51cto.com/4114344/743740 1 ...

  2. 求数列中第K大的数

    原创 利用到快速排序的思想,快速排序思想:https://www.cnblogs.com/chiweiming/p/9188984.html array代表存放数列的数组,K代表第K大的数,mid代表 ...

  3. MongoDB整理笔记の增加节点

    MongoDB Replica Sets 不仅提供高可用性的解决方案,它也同时提供负载均衡的解决方案,增减Replica Sets 节点在实际应用中非常普遍,例如当应用的读压力暴增时,3 台节点的环境 ...

  4. 注册 asp.net IIS

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319/aspnet_regiis.exe -i

  5. 数独·唯一性技巧(Uniqueness)-1

    唯一性技巧基于这样一个事实——各类出版物上发布的数独题目都只有唯一解.事实上,绝大多数数独玩家有这样的共识:即合格的数独题目解应该是唯一的.因此,为了保证题目合格.有效,出题者在制作题目时,会将一些虽 ...

  6. WinForm中获取Listbox、DataGridView等控件某行对应的数据

    Listbox:listbox.SelectedItem as XXX DataGridView:dataGridView1.Rows[i].Cells[1].Value.ToString()

  7. 《Think in Java》

    chapter 1 对象导论 面向对象程序设计(Object-oriented Programming ,OOP) chapter 2 一切都是对象 字段和方法 若类的某个成员变量是基本数据类型,即是 ...

  8. 857. Minimum Cost to Hire K Workers

    There are N workers.  The i-th worker has a quality[i] and a minimum wage expectation wage[i]. Now w ...

  9. 强制json格式

  10. Markdown使用样例

    # 欢迎使用 Cmd - 在线 Markdown 编辑阅读器 ------ 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,**Cmd Markdown** 是 ...