Products
LGTM+ Stack
Key Capabilities
Observability Solutions
IRM
Deploy The Stack
Open Source
Community resources
Dashboard templates
Try out and share prebuilt visualizations
Prometheus exporters
Get your metrics into Prometheus quickly
end-to-end solutions
Opinionated solutions that help you get there easier and faster
monitor infrastructure
Out-of-the-box KPIs, dashboards, and alerts for observability
visualize any data
Instantly connect all your data sources to Grafana
Learn
Stay up to date
Technical learning
Docs
Get started
Get started with Grafana
Build your first dashboard
Get started with Grafana Cloud
What's new / Release notes
Help build the future of open source observability software Open positions
Check out the open source projects we support Downloads
Deploy The Stack
end-to-end solutions
Opinionated solutions that help you get there easier and faster
visualize any data
Instantly connect all your data sources to Grafana
The encrypt()
method encrypts some data.
encrypt(algorithm, key, data)
Name | Type | Description |
---|---|---|
algorithm | AesCbcParams, AesCtrParams, or AesGcmParams object | Defines the algorithm to use and any extra-parameters. |
key | CryptoKey | The key to use for encryption. |
data | ArrayBuffer , TypedArray , or DataView | The data to be encrypted (also known as “plaintext”). |
AES-CBC | AES-CTR | AES-GCM | RSA-OAEP |
---|---|---|---|
✅ AesCbcParams | ✅ AesCtrParams | ✅ AesGcmParams | ✅ RsaOaepParams |
A Promise
that resolves to a new ArrayBuffer
containing the encrypted data.
Type | Description |
---|---|
InvalidAccessError | Raised when the requested operation is not valid with the provided key. For instance when an invalid encryption algorithm is used, or a key not matching the selected algorithm is provided. |
OperationError | Raised when the operation failed for an operation-specific reason. For instance, if the algorithm size is invalid, or errors occurred during the process of decrypting the ciphertext. |
export default async function () {
const plaintext = stringToArrayBuffer('Hello, World!');
/**
* Generate a symmetric key using the AES-CBC algorithm.
*/
const key = await crypto.subtle.generateKey(
{
name: 'AES-CBC',
length: 256,
},
true,
['encrypt', 'decrypt']
);
/**
* Encrypt the plaintext using the AES-CBC key with
* have generated.
*/
const iv = crypto.getRandomValues(new Uint8Array(16));
const ciphertext = await crypto.subtle.encrypt(
{
name: 'AES-CBC',
iv: iv,
},
key,
plaintext
);
/**
* Decrypt the ciphertext using the same key to verify
* that the resulting plaintext is the same as the original.
*/
const deciphered = await crypto.subtle.decrypt(
{
name: 'AES-CBC',
iv: iv,
},
key,
ciphertext
);
console.log(
'deciphered text == original plaintext: ',
arrayBufferToHex(deciphered) === arrayBufferToHex(plaintext)
);
}
function arrayBufferToHex(buffer) {
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('');
}
function stringToArrayBuffer(str) {
const buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char
const bufView = new Uint16Array(buf);
for (let i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}