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...