Web Crypto API為常見的加解密任務提供了一組基礎函數,可通過全局crypto.subtle接口訪問。
支持的算法
邊緣函數計劃支持Web Crypto標準的所有操作,如下表所示:
| Algorithm | digest() | generateKey() (即將支持) |
importKey() exportKey() (即將支持) |
sign() verify() |
encrypt() decrypt() (即將支持) |
wrapKey() unwrapKey() (即將支持) |
deriveBits() deriveKey() (即將支持) |
|---|---|---|---|---|---|---|---|
| MD5 | √ | ||||||
| SHA1 | √ | ||||||
| SHA256 | √ | ||||||
| SHA384 | √ | ||||||
| SHA512 | √ | ||||||
| HMAC | √ | √ | √ | ||||
| AES-CTR | √ | √ | √ | √ | |||
| AES-CBC | √ | √ | √ | √ | |||
| AES-GCM | √ | √ | √ | √ | |||
| AES-KW | √ | √ | √ | ||||
| RSASSAPKCS1 v1.5 | √ | √ | √ | ||||
| RSA PSS | √ | √ | √ | ||||
| RSA OAEP | √ | √ | √ | ||||
| ECDH | √ | √ | √ | ||||
| ECDSA | √ | √ | √ | ||||
| HKDF | √ | √ | |||||
| PBKDF2 | √ | √ |
備注:MD5不是WebCrypto標準的一部分,但支持與需要MD5的舊系統交互。MD5被認為是一種弱算法。不要依賴MD5來保證安全。
示例
一個摘要算法(也稱為哈希算法)簡單示例:
const myText = new TextEncoder().encode("Hello world!")
const myDigest = await crypto.subtle.digest(
{
name: "SHA-256",
},
myText, // The data you want to hash as an ArrayBuffer
)
return new Response(new Uint8Array(myDigest))
方法
- crypto.getRandomValues(buffer
ArrayBuffer)ArrayBuffer:使用隨機值填充ArrayBuffer。
SubtleCrypto方法
這些方法都可以通過crypto.subtle調用:
digest()
-
digest(algorithm, data)
Promise<ArrayBuffer>返回一個由算法生成的摘要和作為參數給出的文本實現的Promise。
參數:
- algorithm
string | object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - data
ArrayBuffer
- algorithm
generateKey()
-
generateKey(algorithm, extractable, keyUsages)
Promise<CryptoKey> | Promise<CryptoKeyPair>返回一個Promise,該Promise使用新生成的CryptoKey,對于對稱算法,或一個CryptoKeyPair,包含兩個新生成的密鑰,用于非對稱算法。例如,要生成新的AES-GCM密鑰:
let keyPair = await crypto.subtle.generateKey( { name: "AES-GCM", length: "256" }, true, ["encrypt", "decrypt"] )參數:
- algorithm
object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - extractable
bool - keyUsages
Array:指示新密鑰可能用途的字符串數組。
- algorithm
importKey()
-
importKey(format, keyData, algorithm, extractable, keyUsages)
Promise<CryptoKey>將密鑰從某種外部可移植格式轉換為用于Web Crypto API的密鑰。
參數:
- format
string:描述要導入的密鑰的格式。 - keyData
ArrayBuffer - algorithm
object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - extractable
bool - keyUsages
Array:指示新密鑰可能用途的字符串數組。
- format
exportKey()
-
exportKey(format, key)
Promise<ArrayBuffer>將CryptoKey轉換為可移植格式,如果CryptoKey是extractable(即將支持)。
參數:
- format
string:描述導出密鑰的格式。 - key
CryptoKey
- format
sign()
-
sign(algorithm, key, data)
Promise<ArrayBuffer>返回一個Promise,該Promise具有與作為參數給出的文本、算法和密鑰相對應的簽名。
參數:
- algorithm
string | object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - key
CryptoKey - data
ArrayBuffer
- algorithm
verify()
-
verify(algorithm, key, signature, data)
Promise<ArrayBuffer>返回一個Promise,該Promise用一個布爾值來表示作為參數給出的簽名是否與同樣作為參數給出的文本、算法和密鑰相匹配。
參數:
- algorithm
string | object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - key
CryptoKey - signature
ArrayBuffer - data
ArrayBuffer
- algorithm
encrypt()
-
encrypt(algorithm, key, data)
Promise<ArrayBuffer>返回一個Promise,該Promise使用與作為參數給出的明文、算法和密鑰相對應的加密數據實現(即將支持)。
參數:
- algorithm
object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - key
CryptoKey - data
BufferSource
- algorithm
decrypt()
-
decrypt(algorithm, key, data)
Promise<ArrayBuffer>返回一個Promise,該Promise以與作為參數給出的密文、算法和密鑰相對應的明文數據實現(即將支持)。
參數:
- algorithm
object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - key
CryptoKey - data
BufferSource
- algorithm
wrapKey()
-
wrapKey(format, key, wrappingKey, wrapAlgo)
Promise<ArrayBuffer>將CryptoKey轉換為可移植格式,然后使用另一個密鑰對其進行加密。讓CryptoKey適合在不受信任的環境中存儲或傳輸(即將支持)。
參數:
- format
string:描述在被加密之前的導出密鑰的格式。 - key
CryptoKey - wrappingKey
CryptoKey - wrapAlgo
object:以特定于算法的格式描述用于加密導出密鑰的算法,包括任何必需的參數。
- format
unwrapKey
-
unwrapKey(format, key, unwrappingKey, unwrapAlgo,unwrappedKeyAlgo, extractable, keyUsages)
Promise<CryptoKey>將由wrapKey()back包裝的密鑰轉換為CryptoKey(即將支持)。
參數:
- format
string:描述要解包的密鑰的數據格式。 - key
CryptoKey - unwrappingKey
CryptoKey - unwrapAlgo
object:以特定于算法的格式描述用于加密封裝密鑰的算法。 - unwrappedKeyAlgo
object:以特定于算法的格式描述要解包的密鑰。 - extractable
bool - keyUsages
Array:指示新密鑰可能用途的字符串數組。
- format
deriveKey()
-
deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)
Promise<CryptoKey>返回一個Promise,該Promise使用新生成的CryptoKey派生自基本密鑰和作為參數給出的特定算法(即將支持)。
參數:
- algorithm
object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - baseKey
CryptoKey - derivedKeyAlgorithm
object:以特定于算法的格式定義派生密鑰將用于的算法。 - extractable
bool - keyUsages
Array:指示新密鑰可能用途的字符串數組。
- algorithm
deriveBits()
-
deriveBits(algorithm, baseKey, length)
Promise<ArrayBuffer>返回一個Promise,該Promise使用新生成的偽隨機位緩沖區來實現,該緩沖區從基本密鑰和作為參數給出的特定算法派生而來。它返回一個ArrayBuffer包含派生位的Promise。此方法與deriveKey()非常相似,不同之處在于deriveKey()返回一個CryptoKey對象而不是一個ArrayBuffer。本質上,deriveKey()由deriveBits()后跟importKey()(即將支持)。
參數:
- algorithm
object:以特定算法的格式描述要使用的算法,包括任何必需的參數。 - baseKey
CryptoKey - length
int:要導出的位串的長度。
- algorithm