Window.crypto需要chrome 37、ie 11、safari 11支持所有API,基本的加密解密都可以在safari 7中完成。
Crypto.subtitle.generatekey(算法,可提取,密鑰用法),其中:
1.算法參數根據不同的算法填入相應的參數對,rsa需要填入RsaHashedKeyGenParams對象,該對象包括:
2.extractable壹般為true,表示是否允許將密鑰導出為文本。
3.KeyUsage是壹個數組,可以加密、解密、簽名等。
函數的結果返回壹個promise對象。如果是對稱加密,會得到壹個密鑰CryptoKey類型,rsa在這裏會得到壹個密鑰對CryptoKeyPair,它有兩個CryptoKey成員,privateKey和publicKey。我們將密鑰導出為文本,或者通過這兩個成員對象對其進行加密和解密。
window . crypto . subtitle . export key(格式,密鑰),其中:
1可選擇Raw、pkcs8、spki、jwk。格式,spki和pkcs8可以選擇用於我們的公鑰導出。
2.該密鑰是上述密鑰對的私鑰或公鑰。
該函數返回壹個promise對象,結果是壹個ArrayBuffer,這是pem風格的。
window . crypto . conductive . import key(
格式,
關鍵數據,
算法,
可提取的,
關鍵用法
),其中:
1可選擇Raw、pkcs8、spki、jwk。格式,對應的是上壹代。我們在導入公鑰時選擇spki,在導入私鑰時選擇pkcs8。
2.keyData,也就是window . crypto . finded . export key獲取的ArrayBuffer,因為我們這裏壹般只有pem文本,所以還是要轉換成ArrayBuffer。
3.算法我們這裏是rsa,需要填充壹個RsaHashedImportParams對象,對應crypto . congregate . generate key需要的RsaHashedKeyGenParams對象,包含:
4.extractable與crypto . finessive . generate key相同
5.密鑰用法與crypto . finded . generate key相同
函數返回壹個promise對象,結果是壹個CryptoKey。
Encrypt crypto.subtitle.encrypt(算法,密鑰,數據),其中:
1.算法,加解密只支持RSA-OAEP,不支持RSAES-PKCS1-v1_5。
2.key是公鑰的CryptoKey對象。
3.數據是BufferSource對象,不能是直接加密的字符串。
結果是壹個ArrayBuffer,可以使用window . btoa(string . from charcode(...新uint8array (e))。
解密crypto.subtitle.decrypt(算法,密鑰,數據)基本和加密壹樣,數據對應加密返回的ArrayBuffer。如果base64字符串是從後端加密的,就需要轉換成Uint8Array。
返回值與加密相同。