AES Encryption

by douglasloyo

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js"></script>

JavaScript

function strToArrayBuffer(str) {
  var buf = new ArrayBuffer(str.length * 2);
  var bufView = new Uint16Array(buf);
  for (var i = 0, strLen = str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

function arrayBufferToString(buf) {
  return String.fromCharCode.apply(null, new Uint16Array(buf));
}

function arrayBufferToBase64( buffer ) {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return window.btoa( binary );
}

var algoKeyGen = { name: 'AES-GCM', length: 256 };
var iv = window.crypto.getRandomValues(new Uint8Array(12));
var algoEncrypt = { name: 'AES-GCM', iv: iv, tagLength: 128 };
var keyUsages = ['encrypt','decrypt'];

function RSAEncrypt(text)
{
  let publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA06DFURbmBnz9Vw2ovqRlnD1BnPClyv6GWrm6LAb4KGLlds5r5t5wtfeiPq4ODGFTbBIyUoLmfMG6aJXqgWJEdtcZY2pEraefrjJKR+mn09sm/NW1zLz/RUxNfBaVqbEaS9XHG+9cVMU+ab8pUgm+BiiBwCI44XqS+aeCgaO5eGidKiIQ0SeE46Q1eRKE6y+uCJZQK8i0dkDL5u+KJ7sZONjoR8smENSZ25VCjejxsZ53ebKB4Od8rwt+gP3iLAMndTNWNdseWptwXq0jR7HC0Qwk7hp/HjPKrWAxCz4hZJnhpdXEHgkKtpO4r9GT6/ifNjTMtv/OJ+5q5CvbJ9ibNQIDAQAB";


  let RSAEncrypt = new JSEncrypt();
  RSAEncrypt.setPublicKey(publicKey);
  let cipheredText = RSAEncrypt.encrypt(text);
  return cipheredText;
}

var jsonPayload = {
	IdentityElectronicMailAddress:"[email protected]",
  LeaningAppUrl:"https://www.schoology.com",
  UTCStartDateTime: new Date().toUTCString()
};

(async () => {
   var key = await window.crypto.subtle.generateKey(algoKeyGen, true, keyUsages);
   const exported = await window.crypto.subtle.exportKey("raw",key);
   var jsonKey = {k:arrayBufferToBase64(exported), iv:arrayBufferToBase64(iv)};
   
   var aesKeyRSAEncrypted = RSAEncrypt(JSON.stringify(jsonKey));
   console.log('jsonKey: ' + aesKeyRSAEncrypted);
   
   var encryptedText = await...