zoukankan      html  css  js  c++  java
  • 大家好像都比较少关心webcrypto,试试写个简单的sha1/sha256/sha384/sha512实现看看

    <!DOCTYPE html>
    <html>
        <head>
            <META NAME="Author" CONTENT="emu">
            <META NAME="Keywords" CONTENT="webcrypto sha1 sha256 sha384 sha512">
        </head>
        <body>
            <div id=sha></div>
            <script type="text/javascript">
                function output(sign) {
                    document.getElementById("sha").innerHTML += sign + "<br>";
                }
    			function bufferToString(b){
    				var dataview = new DataView(b);
    				result = "";
    				for (var i = 0; i < b.byteLength; i += 4) {
    					tmp = dataview.getUint32(i).toString(16);
    					result += (tmp.length == 8 ? "" : "0") + tmp;
    				}
    				return result;
    			}
                function digest(s, callback, algorithm, errCallback) {
                    try {
                        if (!errCallback) {
                            errCallback = callback;
                        }
                        var c = window.crypto || window.msCrypto;
                        var subtle = c.subtle || c.webkitSubtle;
                        if (!algorithm) algorithm = "SHA-512";
                        var a = s.split("");
                        for (var i = 0; i < a.length; i++) {
                            a[i] = a[i].charCodeAt(0)
                        };
                        var data = new Uint8Array(a);
                        var op = subtle.digest({
                            name: algorithm
                        }, data);
    		
    					if("then" in op){
    						op.then(
    							function(buffer) {
    								callback(bufferToString(buffer));
    							}, function(e) {
    								errCallback(e);
    							})
    					}else{
    						op.oncomplete=function(s){					
    							callback(bufferToString(s.target.result));
    						}
    					}
                    } catch (e) {
                        errCallback(e);
                    }
                }
                digest("test", new Function("output('sha-1(<i>test</i>) : '+arguments[0])"), "SHA-1");
                digest("test", new Function("output('sha-256(<i>test</i>) : '+arguments[0])"), "SHA-256");
                digest("hello", new Function("output('sha-384(<i>hello</i>) : '+arguments[0])"), "SHA-384");
                digest("world", new Function("output('sha-512(<i>world</i>) : '+arguments[0])"), "SHA-512");
            </script>
    
        </body>
    </html>
    


    使用了浏览器原生接口,对旧浏览器没有什么兼容性可言了,尤其是IE,一时半会儿还用不上。

  • 相关阅读:
    「算法笔记」斜率优化
    「算法笔记」多项式求逆
    「算法笔记」霍尔定理
    「算法笔记」Min_25 筛
    「算法笔记」点分治
    「算法笔记」生成函数入门
    「算法笔记」快速数论变换(NTT)
    Spring Boot+Vue全栈开发实战PDF+源代码
    宅米网性能优化实践
    PHP 性能分析第一篇: Xhprof & Xhgui 介绍
  • 原文地址:https://www.cnblogs.com/stonehuang/p/6603174.html
Copyright © 2011-2022 走看看