Skip to content

Instantly share code, notes, and snippets.

@mu-hun
Last active December 1, 2024 00:06
Show Gist options
  • Save mu-hun/aa19fad5695873d082585a3ea46d55b5 to your computer and use it in GitHub Desktop.
Save mu-hun/aa19fad5695873d082585a3ea46d55b5 to your computer and use it in GitHub Desktop.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script type="text/javascript" src="webcrypto/js/forge/forge.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/jsbn.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/util.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/sha1.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/sha256.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/sha512.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/asn1.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/cipher.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/cipherModes.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/seed.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/aes.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/prng.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/random.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/rsa.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/forge/pkcs1.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/webcrypto/common/webcrypto.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/webcrypto/common/webcrypto_msg.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="webcrypto/js/webcrypto/e2e/webcrypto_e2e.js?v=3.0.4.5" charset="UTF-8"></script>
<script type="text/javascript" src="jquery-3.1.1.min.js"></script>
<script type="text/javascript">
$(function() {
// 서버에서 얻은 공개키
var publicKey = 'MIIBCQKCAQB7TksoQlhz/B8dK+Emvtr0enIBzYJBNbRVkMS/KfLXHP6+obPdw7cg5ZQsYsNJ408kCeJrpAS+2O1BDykCUXdizBM/rBZmYLqmWeGckSKNdtEW2Jo3f+menOflJ37PA0/CNUw129EI6ctFBDmo4fn4pMW1fxoaehn7pwEeZynQuf0/HD5V4FfDtaWcc987/FoHL1lLdj5myW+QCnzNsFCv+WND9kEgeMTzF5VinvGX+OmhHkt8pjISRL213Q81i+1rruJP2Vdcz/srh+luK982Y0QBBkAAz0Pz0n2DYXHr+0emgDPzD6U2Fqh19vTU3He4ZJq9YITdhPTzfhR4fDzXAgMBAAE=';
var encrypt_header = "encrypt_";
var double_header = "double_";
var keyname1 = 'Sample1';
function issacweb_escape(msg){
var i;
var ch;
var encMsg = '';
var tmp_msg = String(msg);
tmp_msg = tmp_msg
.replace(/&amp;/g, '&')
.replace(/&lt;/g, '<')
.replace(/&gt;/g, '>')
.replace(/&quot;/g, '"')
.replace(/&#39;/g, "'")
.replace(/&apos;/g, "'");
for (i = 0; i < tmp_msg.length; i++) {
ch = tmp_msg.charAt(i);
if (ch == ' ')
encMsg += '%20';
else if (ch == '%')
encMsg += '%25';
else if (ch == '&')
encMsg += '%26';
else if (ch == '+')
encMsg += '%2B';
else if (ch == '=')
encMsg += '%3D';
else if (ch == '?')
encMsg += '%3F';
else if (ch == '|')
encMsg += '%7C';
else
encMsg += ch;
}
return encMsg;
}
var id = "2018103277";
var pw = "JNU-dremy-277";
if (publicKey == undefined || publicKey.length == 0) {
alert("설정된 공개키가 없습니다. 관리자에게 문의하시기 바랍니다.");
return;
}
if (id == undefined || id.length == 0) {
alert("id를 입력하세요.");
return;
}
if (pw == undefined || pw.length == 0) {
alert("비밀번호를 입력하세요.");
return;
}
var message = issacweb_escape('id') + "=" + issacweb_escape(id);
message += "&" + issacweb_escape('pw') + "=" + issacweb_escape(pw);
try{
var reqHybridEnc = webcrypto.e2e.hybridEncrypt(keyname1, message,
'UTF-8', 'SEED', publicKey, 'RSAES-OAEP', 'RSA-SHA1');
reqHybridEnc.onerror = function(errMsg) { alert(errMsg); };
reqHybridEnc.oncomplete = function(result) {
if(result === "") {
alert("issacweb_data is null");
return;
}
var agentId = "1";
var userId = id;
var issacwebData = result;
var action = "https://sso.jejunu.ac.kr/" + "authentication/issacweb/loginProcess";
var form = $('<form action=' + action + ' method="post">'
+ '<input type="hidden" name="agentId" value="' + agentId + '" />'
+ '<input type="hidden" name="userId" value="' + userId + '" />'
+ '<input type="hidden" name="issacwebData" value="' + issacwebData + '" />'
+ '</form>');
$('body').append(form);
form.submit();
};
}catch(e){
if (e.message) {
alert(e.message+"!");
} else {
alert(e+".");
}
}
});
</script>
</html>
(function () {
("use strict");
var delynn = "3.0.4.5";
var alexz = "1.1.0.1";
var laymond = function () {
return {verE2e: delynn, verForgeNeeded: alexz};
};
var loreina = function () {
if (!forge.getVersion) {
return false;
}
;
var okechukwu = forge.getVersion();
if (okechukwu >= alexz) {
return true;
} else {
return false;
}
};
var vernelda = "";
function carbon() {
var shaaron = webcrypto.addon;
var emmon = webcrypto.e2e.addon;
var toleda = webcrypto.e2e.web;
if (typeof shaaron !== "undefined" && typeof emmon !== "undefined" && typeof emmon.setMediaType === "function") {
cadey = emmon;
cadey.setMediaType("HDD");
} else {
cadey = toleda;
}
}
var thelda = forge.util.hexToBytes("00000000000000000000000000000000");
var victormanuel = forge.util.hexToBytes("0000000000000000000000000000000000000000");
var maryellen = forge.util.hexToBytes("e29987144b13068b64b70173a29ee7dd5470cda5");
var cadey = null;
function dezaraye() {
if (cadey === null) {
cadey = webcrypto.e2e.web;
}
;
return cadey;
}
function trasia(eizen) {
vernelda = eizen;
}
var chace = webcrypto.namespace("e2e");
chace.initializeModule = function () {
carbon();
};
chace.getVersion = laymond;
chace.checkModuleVersion = loreina;
chace.getLastErrMsg = function () {
return dezaraye().getLastErrMsg();
};
chace.setSessionTime = function (riannon) {
return dezaraye().setSessionTime(riannon);
};
chace.getPasswordKeboardSession = function (tnaya, jamms) {
return dezaraye().getPasswordKeboardSession(tnaya, jamms);
};
chace.hybridEncryptKeyboardSession = function (branasia, dante, anaisa, lakema, diera, jkira) {
return dezaraye().hybridEncryptKeyboardSession(branasia, dante, anaisa, lakema, diera, jkira);
};
chace.sessionEncryptKeyboard = function (issaic, shrina, zhariah) {
return dezaraye().sessionEncryptKeyboard(issaic, shrina, zhariah);
};
chace.sessionDecryptKeyboard = function (jesalynn, goutham, carolynne) {
return dezaraye().sessionDecryptKeyboard(jesalynn, goutham, carolynne);
};
chace.sessionFinalizeKeyboard = function (nakala) {
return dezaraye().sessionFinalizeKeyboard(nakala);
};
chace.hybridEncrypt = function (deotis, mirren, nisaiah, janeesha, shahab, arrowyn, brittlyn, charlen) {
return dezaraye().hybridEncrypt(deotis, mirren, nisaiah, janeesha, shahab, arrowyn, brittlyn, charlen);
};
chace.sessionEncrypt = function (adysen, lazareth, bruno) {
return dezaraye().sessionEncrypt(adysen, lazareth, bruno);
};
chace.sessionDecrypt = function (jassan, deontavious, jousha) {
return dezaraye().sessionDecrypt(jassan, deontavious, jousha);
};
chace.sessionFinalize = function (kalyna) {
return dezaraye().sessionFinalize(kalyna);
};
chace.hashMessage = function (hedrick, edwardjames, xzavion, malec) {
return dezaraye().hashMessage(hedrick, edwardjames, xzavion, malec);
};
chace.selftest = function (jadarrion) {
return dezaraye().selftest(jadarrion);
};
chace.generateCustomCode = function (kendron, deatra, christann, kionne, zackry) {
return dezaraye().generateCustomCode(kendron, deatra, christann, kionne, zackry);
};
function adhvaith() {
var casina = new ladena;
return casina;
}
function ladena() {
this.session = {};
}
ladena.prototype.addSession = function (aoibheann, irmuun) {
this.session[aoibheann] = {};
this.setAlgorithmSymmetric(aoibheann, irmuun);
};
ladena.prototype.removeSession = function (purvi) {
if (typeof this.session[purvi] !== "undefined") {
this.session[purvi].sessionKey = "";
this.session[purvi].algorithmSymmetric = "";
this.session[purvi] = "";
delete this.session[purvi];
return true;
} else {
return false;
}
};
ladena.prototype.setAlgorithmSymmetric = function (kinlea, engelbert) {
if (typeof this.session[kinlea] !== "undefined") {
this.session[kinlea].algorithmSymmetric = engelbert;
return true;
} else {
return false;
}
};
ladena.prototype.getAlgorithmSymmetric = function (lenn) {
if (typeof this.session[lenn] !== "undefined") {
return this.session[lenn].algorithmSymmetric;
} else {
return "";
}
};
ladena.prototype.setSessionKey = function (lazare, brandasia) {
if (typeof this.session[lazare] !== "undefined") {
this.session[lazare].sessionKey = brandasia;
return true;
} else {
return false;
}
};
ladena.prototype.getSessionKey = function (cymphonique) {
if (typeof this.session[cymphonique] !== "undefined") {
return this.session[cymphonique].sessionKey;
} else {
return "";
}
};
ladena.prototype.isExistedSession = function (jayetta) {
if (typeof this.session[jayetta] !== "undefined") {
return true;
} else {
return false;
}
};
ladena.prototype.loadSessionFromSessionStorage = function (luchana) {
if (window.sessionStorage) {
var wilba = window.sessionStorage.getItem(luchana);
if (wilba) {
this.session[luchana] = JSON.parse(wilba);
this.setAlgorithmSymmetric(luchana, this.session[luchana].algorithmSymmetric);
this.setSessionKey(luchana, forge.util.decode64(this.session[luchana].sessionKey));
return true;
}
}
;
return false;
};
ladena.prototype.saveSessionToSessionStorage = function (corrisa) {
if (window.sessionStorage) {
var clearence = forge.util.encode64(this.session[corrisa].sessionKey);
var trenell = {sessionKey: clearence, algorithmSymmetric: this.session[corrisa].algorithmSymmetric};
window.sessionStorage.setItem(corrisa, JSON.stringify(trenell));
}
};
ladena.prototype.removeSessionFromSessionStorage = function (kahlan) {
if (window.sessionStorage) {
window.sessionStorage.removeItem(kahlan);
}
};
var taevion = adhvaith();
var mobin = webcrypto.namespace("e2e.web");
mobin.getLastErrMsg = _0xc50dx14;
mobin.hybridEncrypt = function (fifi, udora, alae, sanika, junietta, larya, evonni, jahime) {
if (typeof fifi !== "string") {
fifi = "";
}
;
if (typeof jahime === "undefined") {
jahime = false;
}
;
if (typeof alae === "string") {
alae = alae.toUpperCase();
} else {
alae = "UTF-8";
}
;
if (typeof larya === "string") {
larya = larya.toUpperCase();
} else {
larya = "RSAES-OAEP";
}
;
if (larya === "RSAES-OAEP-OLD") {
evonni = "RSA-OLD";
}
;
if (typeof evonni === "string") {
evonni = evonni.toUpperCase();
} else {
evonni = "RSA-SHA1";
}
;
var greicy = {oncomplete: null, onerror: null, result: null};
var mikah = function (carland) {
trasia(carland);
if (typeof greicy.onerror === "function") {
greicy.onerror(vernelda);
}
};
var veanne = function () {
var chicora = nechemia(sanika);
var jiuliana;
try {
jiuliana = nayali(chicora, junietta, larya);
} catch (e) {
mikah("공개키 암호화 과정에서 오류가 발생하였습니다.");
return;
}
;
var lailarose = forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.INTEGER, false, jiuliana);
var taronda = "";
if (alae === "UTF-8") {
taronda = forge.util.encodeUtf8(udora);
} else {
mikah("지원하지 않는 문자셋입니다. UTF-8을 사용해주세요.");
return;
}
;
var chuy;
try {
chuy = myka(taronda, chicora, sanika);
} catch (e) {
mikah("대칭키 암호화 과정에서 오류가 발생하였습니다.");
return;
}
;
var sebern = forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.OCTETSTRING, false, chuy);
var loi = forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.SEQUENCE, true, []);
loi.value.push(lailarose);
loi.value.push(sebern);
var wynnette = forge.asn1.toDer(loi).getBytes();
greicy.result = forge.util.encode64(wynnette);
if (greicy.result !== null) {
if (fifi !== "" && jahime === true) {
taevion.addSession(fifi, sanika);
taevion.setSessionKey(fifi, chicora);
taevion.saveSessionToSessionStorage(fifi);
}
;
if (typeof greicy.oncomplete === "function") {
greicy.oncomplete(greicy.result);
}
} else {
mikah("확인되지 않은 오류입니다.");
}
};
setTimeout(veanne, 10);
return greicy;
};
mobin.sessionEncrypt = function (taz, eletha, mairen) {
var allinah = {oncomplete: null, onerror: null, result: null};
var bethellen = function () {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
if (typeof allinah.onerror === "function") {
allinah.onerror(vernelda);
}
};
setTimeout(bethellen, 10);
return allinah;
};
mobin.sessionDecrypt = function (frimet, alamar, wandalene) {
var pratham = {oncomplete: null, onerror: null, result: null};
if (typeof wandalene === "string") {
wandalene = wandalene.toUpperCase();
} else {
wandalene = "UTF-8";
}
;
var thorsten = function (mckinzley) {
trasia(mckinzley);
if (typeof pratham.onerror === "function") {
pratham.onerror(vernelda);
}
};
var diamante = function () {
if (taevion.isExistedSession(frimet) === false) {
if (taevion.loadSessionFromSessionStorage(frimet) === false) {
thorsten("존재하지 않는 세션입니다.");
return;
}
}
;
var yanielis = forge.util.decode64(alamar);
var hassiem = "";
try {
hassiem = emmelie(yanielis, taevion.getSessionKey(frimet), taevion.getAlgorithmSymmetric(frimet));
} catch (e) {
thorsten("대칭키 복호화에 실패하였습니다.");
return;
}
;
if (wandalene === "UTF-8") {
pratham.result = forge.util.decodeUtf8(hassiem);
} else {
thorsten("지원하지 않는 문자셋입니다. UTF-8을 사용해주세요.");
return;
}
;
if (typeof pratham.oncomplete === "function") {
pratham.oncomplete(pratham.result);
}
};
setTimeout(diamante, 10);
return pratham;
};
mobin.sessionFinalize = function (sherrol) {
var yigit = {onsuccess: null, onerror: null};
var andretti = function () {
if (taevion.removeSession(sherrol)) {
if (typeof yigit.onsuccess === "function") {
yigit.onsuccess();
}
} else {
trasia("존재하지 않는 세션입니다.");
if (typeof yigit.onerror === "function") {
yigit.onerror(vernelda);
}
;
return;
}
};
setTimeout(andretti, 10);
return yigit;
};
mobin.setSessionTime = function (novea) {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
return false;
};
mobin.getPasswordKeboardSession = function (humairah, hosie) {
var solie = {oncomplete: null, onerror: null, result: null};
var raziel = function () {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
if (typeof solie.onerror === "function") {
solie.onerror(vernelda);
}
};
setTimeout(raziel, 10);
return solie;
};
mobin.hybridEncryptKeyboardSession = function (brenndon, suheily, rahna, euleta, little, allenna) {
var alam = {oncomplete: null, onerror: null, result: null};
var anjoli = function () {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
if (typeof alam.onerror === "function") {
alam.onerror(vernelda);
}
};
setTimeout(anjoli, 10);
return alam;
};
mobin.hashMessage = function (anapaula, yema, hayoung, meiyah) {
var rosolyn = {oncomplete: null, onerror: null, result: null};
var aarvin = function () {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
if (typeof rosolyn.onerror === "function") {
rosolyn.onerror(vernelda);
}
};
setTimeout(aarvin, 10);
return rosolyn;
};
mobin.selftest = function (consiglia) {
var heir = {oncomplete: null, onerror: null, result: null};
var rhianah = function () {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
if (typeof heir.onerror === "function") {
heir.onerror(vernelda);
}
};
setTimeout(rhianah, 10);
return heir;
};
mobin.generateCustomCode = function (makayliah, trowa, armel, aranxa, issabell) {
var abdoul = {oncomplete: null, onerror: null, result: null};
var ayaina = function () {
trasia("심플모드에서는 지원하지 않는 기능입니다.");
if (typeof abdoul.onerror === "function") {
abdoul.onerror(vernelda);
}
};
setTimeout(ayaina, 10);
return abdoul;
};
function nechemia(jamiles) {
if (typeof jamiles === "string") {
jamiles = jamiles.toUpperCase();
} else {
jamiles = "SEED";
}
;
var jaylen;
switch (jamiles) {
case "SEED":
;
case "AES128":
jaylen = 16;
break;
case "AES256":
jaylen = 32;
break;
case "ARIA":
return "";
}
;
var austintyler = forge.random.getBytesSync(jaylen);
return austintyler;
}
function nayali(lendon, pharren, wilsie, virgilene) {
if (typeof wilsie === "string") {
wilsie = wilsie.toUpperCase();
} else {
wilsie = "RSAES-OAEP";
}
;
if (wilsie === "RSAES-OAEP-OLD") {
virgilene = "RSA-OLD";
}
;
if (typeof virgilene === "string") {
virgilene = virgilene.toUpperCase();
} else {
virgilene = "RSA-SHA1";
}
;
var amner;
var arpi;
switch (virgilene) {
case "RSA-SHA1":
;
case "SHA1":
amner = forge.md.sha1.create();
arpi = victormanuel;
break;
case "RSA-SHA256":
;
case "SHA256":
amner = forge.md.sha256.create();
arpi = thelda + thelda;
break;
case "RSA-SHA384":
;
case "SHA384":
return "";
case "RSA-SHA512":
;
case "SHA512":
amner = forge.md.sha512.create();
var pearlie = thelda + thelda;
arpi = pearlie + pearlie;
break;
case "RSA-OLD":
amner = forge.md.sha1.create();
arpi = maryellen;
break;
}
;
var zay = forge.util.decode64(pharren);
var hortencia = forge.asn1.fromDer(zay);
var pharren = forge.pki.publicKeyFromAsn1(hortencia);
return pharren.encrypt(lendon, wilsie, {md: amner, seed: arpi});
}
function myka(deayra, margreat, ezabel, karac, glyniss) {
if (typeof ezabel === "string") {
ezabel = ezabel.toUpperCase();
} else {
ezabel = "SEED";
}
;
var rhylee;
switch (ezabel) {
case "SEED":
if (glyniss === undefined) {
glyniss = thelda;
}
;
rhylee = forge.seed.createEncryptionCipher;
break;
case "ARIA":
return "";
case "AES128":
if (glyniss === undefined) {
glyniss = thelda;
}
;
rhylee = forge.aes.createEncryptionCipher;
break;
case "AES256":
if (glyniss === undefined) {
glyniss = thelda + thelda;
}
;
rhylee = forge.aes.createEncryptionCipher;
break;
}
;
var ulyssess = rhylee(margreat, karac);
ulyssess.start(glyniss);
ulyssess.update(forge.util.createBuffer(deayra));
ulyssess.finish();
return ulyssess.output.getBytes();
}
function emmelie(zeva, joeley, jaina, azala, jermya) {
if (typeof jaina === "string") {
jaina = jaina.toUpperCase();
} else {
jaina = "SEED";
}
;
var jovahny;
switch (jaina) {
case "SEED":
if (jermya === undefined) {
jermya = thelda;
}
;
jovahny = forge.seed.createDecryptionCipher;
break;
case "ARIA":
return "";
case "AES128":
if (jermya === undefined) {
jermya = thelda;
}
;
jovahny = forge.aes.createDecryptionCipher;
break;
case "AES256":
if (jermya === undefined) {
jermya = thelda + thelda;
}
;
jovahny = forge.aes.createDecryptionCipher;
break;
}
;
var panagiota = jovahny(joeley, azala);
panagiota.start(jermya);
panagiota.update(forge.util.createBuffer(zeva));
panagiota.finish();
return panagiota.output.getBytes();
}
function wrenly(jestin, nikerria, elyam, alcibiades, etheldreda) {
if (typeof elyam === "string") {
elyam = elyam.toUpperCase();
} else {
elyam = "SEED";
}
;
var sexton;
switch (elyam) {
case "SEED":
if (etheldreda === undefined) {
etheldreda = thelda;
}
;
sexton = forge.seed.createDecryptionCipher;
break;
case "ARIA":
return "";
case "AES128":
if (etheldreda === undefined) {
etheldreda = thelda;
}
;
sexton = forge.aes.createDecryptionCipher;
break;
case "AES256":
if (etheldreda === undefined) {
etheldreda = thelda + thelda;
}
;
sexton = forge.aes.createDecryptionCipher;
break;
}
;
var marquiss = sexton(nikerria, alcibiades);
marquiss.start(etheldreda);
marquiss.update(forge.util.createBuffer(jestin));
marquiss.finish(function () {
return true;
});
return marquiss.output.getBytes();
}
carbon();
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment