aes-optimal
Version:
AES Encryption Library
61 lines (48 loc) • 1.71 kB
JavaScript
/**
* index.js
* AES Optimal - Encryption Library
* @author Abubakar Hassan <abubakarhassan59@gmail.com>
* @copyright Abubakar Hassan (c) 2024
* @license MIT
*/
/* jshint node: true */
;
const CryptoJS = require('node-cryptojs-aes').CryptoJS;
const OpenSslFormat = {
stringify(params) {
const salt = CryptoJS.enc.Hex.parse(params.salt.toString()).toString(CryptoJS.enc.Latin1);
const ct = params.ciphertext.toString(CryptoJS.enc.Latin1);
return CryptoJS.enc.Latin1.parse('Salted__' + salt + ct).toString(CryptoJS.enc.Base64);
},
parse(str) {
const parsedStr = CryptoJS.enc.Base64.parse(str).toString(CryptoJS.enc.Latin1);
const salted = parsedStr.substr(0, 8);
if (salted !== 'Salted__') {
throw new Error('Error parsing salt');
}
const salt = parsedStr.substr(8, 8);
const ct = parsedStr.substr(16);
return CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Latin1.parse(ct),
salt: CryptoJS.enc.Latin1.parse(salt)
});
}
};
const AES256 = {
encrypt: function(input, passphrase) {
return CryptoJS.AES.encrypt(input, passphrase, {format: OpenSslFormat}).toString();
},
decrypt: function(crypted, passphrase) {
return CryptoJS.AES.decrypt(crypted, passphrase, {format: OpenSslFormat}).toString(CryptoJS.enc.Utf8);
},
encryptWithCustomIV: function (input, key, iv) {
return CryptoJS.AES.encrypt(input, key, { iv: iv }).toString();
},
decryptWithCustomIV: function (crypted, key, iv) {
return CryptoJS.AES.decrypt(crypted, key, { iv: iv }).toString(CryptoJS.enc.Utf8);
},
encodeKey: function (key) {
return CryptoJS.enc.Base64.parse(key);
},
};
module.exports = AES256;