var AesUtil = function(keySize, iterationCount) {
this.keySize = keySize / 32;
this.iterationCount = iterationCount;
};
AesUtil.prototype.generateKey = function(salt, passPhrase) {
var key = CryptoJS.PBKDF2(
passPhrase,
CryptoJS.enc.Hex.parse(salt),
{ keySize: this.keySize, iterations: this.iterationCount });
return key;
}
AesUtil.prototype.encrypt = function(salt, iv, passPhrase, plainText) {
var key = this.generateKey(salt, passPhrase);
var encrypted = CryptoJS.AES.encrypt(
plainText,
key,
{ iv: CryptoJS.enc.Hex.parse(iv) });
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
}
AesUtil.prototype.decrypt = function(salt, iv, passPhrase, cipherText) {
var key = this.generateKey(salt, passPhrase);
var cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Base64.parse(cipherText)
});
var decrypted = CryptoJS.AES.decrypt(
cipherParams,
key,
{ iv: CryptoJS.enc.Hex.parse(iv) });
return decrypted.toString(CryptoJS.enc.Utf8);
}
<script src="/src/js/crypto/aes.js"></script>
<script src="/src/js/crypto/pbkdf2.js"></script>
<script src="/src/js/crypto/AesUtil.js"></script>
<script src="/src/js/crypto/jsencrypt.min.js"></script>
// import crypto libs
<script>
function _rsaEnc(p){
var e=new JSEncrypt();
e.setPublicKey('-----BEGIN PUBLIC KEY-----pk-----END PUBLIC KEY-----');
return e.encrypt(p);
}
var passphrase = CryptoJS.lib.WordArray.random(128/8).toString(CryptoJS.enc.Hex);
// generate passphrase
var iv = CryptoJS.lib.WordArray.random(128/8).toString(CryptoJS.enc.Hex);
var salt = CryptoJS.lib.WordArray.random(128/8).toString(CryptoJS.enc.Hex);
var aesUtil = new AesUtil(128, 8);
var rsaKey = encodeURIComponent(_rsaEnc(salt+iv+passphrase));
var cipherText = aesUtil.encrypt(salt, iv, passphrase, 'plainText');
// encrypt
</script>
Hi..
Thanks for the snippet. It was really helpful.
Can you let me know if I can use it in my project (commercial).
What are is the licence policy that will apply if I do so?
thanks.