大家好像都比较少关心webcrypto,试试写个简单的sha1/sha256/sha384/sha512实现看看

来源:互联网 发布:json对象里能放图片吗 编辑:程序博客网 时间:2024/04/27 22:06

<!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,一时半会儿还用不上。

0 0