emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks
          <!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 bufferToHex(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(bufferToHex(buffer));
                                      }, 
          function(e) {
                                          errCallback(e);
                                      })
                              }
          else{
                                  op.oncomplete
          =function(s){                    
                                      callback(bufferToHex(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>

          使用了瀏覽器原生接口,對(duì)舊瀏覽器沒有什么兼容性可言了,尤其是IE,一時(shí)半會(huì)兒還用不上。
          posted on 2014-09-27 21:40 emu 閱讀(1368) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 大家好像都比較少關(guān)心webcrypto,試試寫個(gè)簡(jiǎn)單的sha1/sha256/sha384/sha512實(shí)現(xiàn)看看[未登錄] 2016-01-14 11:28 emu
          http://encode.chahuo.com/ 可以在這里驗(yàn)證一下結(jié)果。

          偶然發(fā)現(xiàn),好像IE11支持了:
          https://msdn.microsoft.com/zh-cn/library/dn302325(v=vs.85).aspx  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东至县| 尤溪县| 沅陵县| 庄浪县| 吴忠市| 长垣县| 阿克苏市| 鱼台县| 呼玛县| 政和县| 赤壁市| 文山县| 武山县| 乌鲁木齐市| 盐亭县| 苍梧县| 荥阳市| 江山市| 乌拉特后旗| 井冈山市| 长泰县| 临漳县| 湘乡市| 建德市| 湟源县| 全椒县| 日喀则市| 崇义县| 新源县| 桐乡市| 晴隆县| 乌兰浩特市| 和政县| 丹东市| 苍梧县| 三穗县| 札达县| 牟定县| 泸水县| 蒙自县| 盈江县|