The SubtleCrypto.encrypt() method returns a Promise of the encrypted data corresponding to the plaintext data, algorithm and key given as parameters.
var result = crypto.subtle.encrypt(algorithm, key, data);
algorithm is an object specifying the encryption function to be used and its parameters; if there are no parameters, algorithm can be a DOMString with the algorithm name. Supported values¹ are: {"name": "AES-CBC", iv} where iv is a 16-byte BufferSource initialization vector (generated by RandomSource.getRandomValues()).{"name": "AES-CTR", counter, length} where counter is an initialised 16-byte BufferSource counter block, and length is the length (in bits) of the part of the counter block that is incremented.{"name": "AES-GCM", iv[, additionalData, tagLength]} where iv is a BufferSource initialization vector up to 2⁶⁴−1 bytes long; additionalData is a BufferSource authentication data and tagLength is the length of the authentication tag.{"name": "RSA-OAEP"[, label]} where label is an optional label to associate with the message.key is a CryptoKey containing the key to be used for encryption.data is a BufferSource containing the data to be encrypted, the plaintext.result is a Promise that returns the ciphertext generated by the encryption of the plaintext as an ArrayBuffer.The promise is rejected when the following exceptions are encountered:
const encryptText = async (plainText, password) => {
const ptUtf8 = new TextEncoder().encode(plainText);
const pwUtf8 = new TextEncoder().encode(password);
const pwHash = await crypto.subtle.digest('SHA-256', pwUtf8);
const iv = crypto.getRandomValues(new Uint8Array(12));
const alg = { name: 'AES-GCM', iv: iv };
const key = await crypto.subtle.importKey('raw', pwHash, alg, false, ['encrypt']);
return { iv, encBuffer: await crypto.subtle.encrypt(alg, key, ptUtf8) };
}
The password and the iv will be required for the SubtleCrypto.decrypt() operation.
| Specification | Status | Comment |
|---|---|---|
| Web Cryptography API The definition of 'SubtleCrypto.encrypt()' in that specification. | Recommendation | Initial definition. |
| Desktop | ||||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
| Basic support | 37 | 12 | 34
|
11
|
24 | 7 |
| Mobile | |||||||
|---|---|---|---|---|---|---|---|
| Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
| Basic support | 37 | 37 | 12 | 34
|
24 | 7 | 6.0 |
Crypto and Crypto.subtle.SubtleCrypto, the interface it belongs to.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt