@nestia/fetcher
Version:
Fetcher library of Nestia SDK
50 lines (47 loc) • 1.25 kB
text/typescript
import crypto from "crypto";
/**
* Utility class for the AES-128/256 encryption.
*
* - AES-128/256
* - CBC mode
* - PKCS#5 Padding
* - Base64 Encoding
*
* @author Jeongho Nam - https://github.com/samchon
*/
export namespace AesPkcs5 {
/**
* Encrypt data
*
* @param data Target data
* @param key Key value of the encryption.
* @param iv Initializer Vector for the encryption
* @returns Encrypted data
*/
export function encrypt(data: string, key: string, iv: string): string {
const bytes: number = key.length * 8;
const cipher: crypto.Cipher = crypto.createCipheriv(
`AES-${bytes}-CBC`,
key,
iv,
);
return cipher.update(data, "utf8", "base64") + cipher.final("base64");
}
/**
* Decrypt data.
*
* @param data Target data
* @param key Key value of the decryption.
* @param iv Initializer Vector for the decryption
* @returns Decrypted data.
*/
export function decrypt(data: string, key: string, iv: string): string {
const bytes: number = key.length * 8;
const decipher: crypto.Decipher = crypto.createDecipheriv(
`AES-${bytes}-CBC`,
key,
iv,
);
return decipher.update(data, "base64", "utf8") + decipher.final("utf8");
}
}