_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