Skip to content

Instantly share code, notes, and snippets.

@hongry18
Last active January 6, 2023 01:07
Show Gist options
  • Select an option

  • Save hongry18/e093cc2638e437cce58632ab38f7ff46 to your computer and use it in GitHub Desktop.

Select an option

Save hongry18/e093cc2638e437cce58632ab38f7ff46 to your computer and use it in GitHub Desktop.
javascript aes, rsa crypto

JavaScript Dependency

AesUtil.js

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>
@knz237
Copy link
Copy Markdown

knz237 commented Aug 22, 2019

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.

@hongry18
Copy link
Copy Markdown
Author

@knz237
You can use it to use it.
There is no special policy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment