_includes/encrypted.html in no-style-please2-0.7.5.1 vs _includes/encrypted.html in no-style-please2-0.8.0

- old
+ new

@@ -19,51 +19,63 @@ </div> <div id = 'decryptContent'> </div> </div> - <script src="//cdn.jsdelivr.net/gh/vitock/jsdelivr@0.1.1/js/salsa20.min.js"></script> - <script src="//cdn.jsdelivr.net/gh/vitock/jsdelivr@0.1.1/js/base64.js"></script> - <script src="//cdn.jsdelivr.net/gh/vitock/jsdelivr@0.1.1/js/md5.js"></script> <script> + var exports = exports || {} + </script> + <script src="//cdn.jsdelivr.net/gh/vitock/jsdelivr@0.1.2/js/base64js.js"></script> + <script> !function(){ - const preFix = '{{encid}}'; - const encid = preFix - var encryptedContent = '{{ content | encrypt_content:page, encid}}' - const nonceStr = encryptedContent.substring(0,16); - const msg = encryptedContent.substring(17) - - function hexToUint8Arr(hexString){ - return new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); - } + const substl = crypto.subtle + const preFix = '{{encid}}'; + const encid = preFix + const encryptedContent = '{{ content | encrypt_content:page, encid}}' + const base64str = encryptedContent.substring(3) + const bfMsg = base64js.decode(base64str) + const bfIv = bfMsg.subarray(0,12) + const bfCipher = bfMsg.subarray(12) + + async function genKey(psw){ + var keyRaw = new TextEncoder().encode(psw) + var key = await substl.importKey('raw',keyRaw,'PBKDF2',false,["deriveBits"]) + const salt = 'this is a salt string 20221019' + let pbkdf2 = { + name:"PBKDF2",hash: "SHA-256",iterations: 12345,salt: new TextEncoder().encode(salt) + } + return await substl.deriveBits(pbkdf2,key,256); + } - function decrypt (key0,isCached){ + + + async function decrypt (key0,isCached){ // const key = Uint8Array([...]); // 32 bytes key var key = '' - var keyDgst = "" if(isCached){ - keyDgst= key0 - key = new TextEncoder("utf-8").encode(keyDgst); + key = readKey() } else{ var keyS = preFix + key0 + preFix - keyDgst = md5(keyS) - key = new TextEncoder("utf-8").encode(keyDgst); + key = await genKey(keyS) } - var nonce = hexToUint8Arr(nonceStr) - - - const message = Base64.toUint8Array(msg) - // Encrypt // - const decrypt = new JSSalsa20(key, nonce).decrypt(message); - var plain = new TextDecoder("utf-8").decode(decrypt) - var check = md5(plain) - if(check.indexOf(nonceStr) == 0){ - setKey(keyDgst) - /// hide input + if (key.length == 0) { + return + } + + var aeskey = { + name:"AES-GCM", + length:256 + } + var keyObj = await substl.importKey('raw',key,aeskey,false,['decrypt']) + var aesDec= {name: "AES-GCM",iv:bfIv,tagLength:128} + try { + var bfDec = await substl.decrypt(aesDec,keyObj,bfCipher) + var plain = new TextDecoder().decode(bfDec); + setKey(key) document.getElementById("encrypted").style.display = 'none' // / show decrypted document.getElementById("decrypted").style.display = 'block' document.getElementById("decryptContent").innerHTML = plain @@ -75,17 +87,15 @@ var DOMContentLoaded_event = document.createEvent("Event") DOMContentLoaded_event.initEvent("DOMContentLoaded", true, true) window.dispatchEvent(loadevent) window.dispatchEvent(DOMContentLoaded_event) - console.log('333a334a') }, 500); - - }else{ + } catch (error) { alert("wrong password.") - } + } } document.getElementById("DecryptBtn").onclick = function(){ var key = document.getElementById("passwordinput").value decrypt(key); @@ -128,15 +138,22 @@ function clearKey() { } {% else %} function readKey(){ var key = encid; - return localStorage.getItem(key) + var v = localStorage.getItem(key) + if (v) { + return base64js.decode(v) + }else{ + return null + } } function setKey(value){ var key = encid - return localStorage.setItem(key,value) + var arr = new Uint8Array(value) + var b64 = base64js.encode(arr) + return localStorage.setItem(key,b64) } function clearKey() { var key = encid localStorage.removeItem(key) } @@ -146,10 +163,10 @@ } {% endif %} - + }() </script> \ No newline at end of file