Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Chrome原生支持的SHA1算法

  现代浏览器都支持了crypto对象(IE需要加ms前缀),之前我们也用过它的getRandomValues方法来生成随机数。crypto对象上还有更高级的用法,只是现在浏览器上的实现不太好而已。不过至少现在Chrome上已经实现了SHA1等一些常用算法,也许将来可以普及。
  由于这些精密算法都是CPU密集型的,实现将其放入额外的线程中处理,并将结果异步返回,于是引入了Promise。下面就是SHA1的一个例子 <!--
  这个API和本博客在线执行代码使用的BlobURL好像有点不兼容
  请保存到本地使用Chrome测试
-->
<script>
crypto.subtle.digest({
  name:"SHA-1"
},new Uint8Array([/*用空数据执行SHA1*/])).then(function(e){
  var hex=Array.prototype.map.call(new Uint8Array(e),function(e){
    return (e<16?"0":"")+e.toString(16);
  }).join("");
  console.log(hex);
  alert(hex);
}).catch(function(e){
  throw e;
});
</script>

  所有摘要类算法都是通过这个crypto.subtle.digest方法来调用的,其第一个参数是算法,它是一个对象,因为有些算法除了名称外还有一些额外的配置信息,全都通过一个参数传入;第二个参数是需要执行这个算法数据,用强类型数组传入;返回的是一个Promise对象,因为算法的执行是异步的。成功的回调将传回一个储存了计算结果的ArrayBuffer。
  crypto.subtle中还提供了很多方法和很多算法,只是目前的兼容性还差太远,暂时还无法投入正式项目中使用。如果目前就急用SHA1只能使用手工实现版的SHA1

  参考资料:
    http://www.w3.org/TR/WebCryptoAPI/
    http://msdn.microsoft.com/en-us/library/ie/dn302338.aspx
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^