2016-11-07 65 views

回答

1

您可以使用內置WebCryptographyApi原生支持所有現代瀏覽器(http://caniuse.com/#feat=cryptography

這從here提取(和修改)的例子,here

function deriveAKey(password, salt, iterations, hash) { 

    // First, create a PBKDF2 "key" containing the password 
    window.crypto.subtle.importKey(
     "raw", 
     stringToArrayBuffer(password), 
     {"name": "PBKDF2"}, 
     false, 
     ["deriveKey"]). 
    then(function(baseKey){ 
     // Derive a key from the password 
     return window.crypto.subtle.deriveKey(
      { 
       "name": "PBKDF2", 
       "salt": stringToArrayBuffer(salt), 
       "iterations": iterations, 
       "hash": hash 
      }, 
      baseKey, 
      {"name": "AES-CBC", "length": 128}, // Key we want.Can be any AES algorithm ("AES-CTR", "AES-CBC", "AES-CMAC", "AES-GCM", "AES-CFB", "AES-KW", "ECDH", "DH", or "HMAC") 
      true,        // Extractable 
      ["encrypt", "decrypt"]    // For new key 
      ); 
    }).then(function(aesKey) { 
     // Export it so we can display it 
     return window.crypto.subtle.exportKey("raw", aesKey); 
    }).then(function(keyBytes) { 
     // Display key in Base64 format 
     var keyS = arrayBufferToString(keyBytes); 
     var keyB64 = btoa (keyS); 
     console.log(keyB64); 
    }).catch(function(err) { 
     alert("Key derivation failed: " + err.message); 
    }); 
} 

//Utility functions 

function stringToArrayBuffer(byteString){ 
    var byteArray = new Uint8Array(byteString.length); 
    for(var i=0; i < byteString.length; i++) { 
     byteArray[i] = byteString.codePointAt(i); 
    } 
    return byteArray; 
} 

function arrayBufferToString(buffer){ 
    var byteArray = new Uint8Array(buffer); 
    var byteString = ''; 
    for(var i=0; i < byteArray.byteLength; i++) { 
     byteString += String.fromCodePoint(byteArray[i]); 
    } 
    return byteString; 
} 

使用

var salt = "Pick anything you want. This isn't secret."; 
var iterations = 1000; 
var hash = "SHA-512"; 
var password = "password"; 

deriveAKey(password, salt, iterations, hash); 
+0

謝謝..會讓你知道並接受答案.. Tha再次爲你努力.. –