kopia lustrzana https://github.com/robinmoisson/staticrypt
commit
7fbffa8dcc
34
example.html
34
example.html
|
@ -134,34 +134,30 @@
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
<script
|
|
||||||
src="https://code.jquery.com/jquery-3.2.1.min.js"
|
|
||||||
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
|
|
||||||
crossorigin="anonymous"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
|
||||||
$('#staticrypt-form').submit(function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
var passphrase = $('#staticrypt-password').val();
|
document.getElementById('staticrypt-form').addEventListener('submit', function (e) {
|
||||||
var encryptedMsg = 'bf73a9eb1c0ef239c83d262470f6a1a55b024a867a41199f73a33b82d73f6855U2FsdGVkX1/GeUxTnFMh1/3gx6bj1Cb4/bQxA/2toJZe8tX6H4azBaCfva11oo9Klj4NIYglL2ln6tQdBGEFHLCRy1ib6Fd89heNRoE30ua/AN0jvfxGP81ZOOzjAeSGb3gDUqOpgobXNz0rTw1z3cl++Sj9yrrOePbhmu7tPEJhz9NT50iAakdHNqm4fOjU4UiJFYBRcKERg0rXG9mHFg==';
|
e.preventDefault();
|
||||||
|
|
||||||
var encryptedHMAC = encryptedMsg.substring(0, 64);
|
var passphrase = document.getElementById('staticrypt-password').value
|
||||||
var encryptedHTML = encryptedMsg.substring(64);
|
var encryptedMsg = 'bf73a9eb1c0ef239c83d262470f6a1a55b024a867a41199f73a33b82d73f6855U2FsdGVkX1/GeUxTnFMh1/3gx6bj1Cb4/bQxA/2toJZe8tX6H4azBaCfva11oo9Klj4NIYglL2ln6tQdBGEFHLCRy1ib6Fd89heNRoE30ua/AN0jvfxGP81ZOOzjAeSGb3gDUqOpgobXNz0rTw1z3cl++Sj9yrrOePbhmu7tPEJhz9NT50iAakdHNqm4fOjU4UiJFYBRcKERg0rXG9mHFg==';
|
||||||
|
|
||||||
var decryptedHMAC = CryptoJS.HmacSHA256(encryptedHTML, CryptoJS.SHA256(passphrase)).toString();
|
var encryptedHMAC = encryptedMsg.substring(0, 64);
|
||||||
|
var encryptedHTML = encryptedMsg.substring(64);
|
||||||
|
|
||||||
if (decryptedHMAC !== encryptedHMAC) {
|
var decryptedHMAC = CryptoJS.HmacSHA256(encryptedHTML, CryptoJS.SHA256(passphrase)).toString();
|
||||||
alert('Bad passphrase !');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var plainHTML = CryptoJS.AES.decrypt(encryptedHTML, passphrase).toString(CryptoJS.enc.Utf8);
|
if (decryptedHMAC !== encryptedHMAC) {
|
||||||
|
alert('Bad passphrase !');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
document.write(plainHTML);
|
var plainHTML = CryptoJS.AES.decrypt(encryptedHTML, passphrase).toString(CryptoJS.enc.Utf8);
|
||||||
});
|
|
||||||
|
document.write(plainHTML);
|
||||||
|
document.close();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
86
index.html
86
index.html
|
@ -123,61 +123,61 @@ Your encrypted string</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script
|
|
||||||
src="https://code.jquery.com/jquery-3.2.1.min.js"
|
|
||||||
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
|
|
||||||
crossorigin="anonymous"></script>
|
|
||||||
<script src="jquery-3.2.1.min.js"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.js"></script>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
var renderTemplate = function (tpl, data) {
|
||||||
|
return tpl.replace(/{(.*?)}/g, function (_, key) {
|
||||||
|
return data && data[key] || '';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var renderTemplate = function (data) {
|
var renderTemplate = function (data) {
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open('GET', 'password_template.html', true);
|
||||||
|
request.onload = function() {
|
||||||
|
var renderedTmpl = renderTemplate(request.responseText, data);
|
||||||
|
|
||||||
$.when($.get('password_template.html'))
|
var downloadLink = document.querySelector('a.download');
|
||||||
.done(function (tmplData) {
|
downloadLink.href = 'data:attachment/text,' + encodeURIComponent(renderedTmpl);
|
||||||
$.templates({tmpl: tmplData});
|
downloadLink.removeAttribute('disabled');
|
||||||
|
};
|
||||||
|
request.send();
|
||||||
|
};
|
||||||
|
|
||||||
var renderedTmpl = $.render.tmpl(data);
|
document.getElementById('encrypt_form').addEventListener('submit', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
var downloadLink = $('a.download');
|
var unencrypted = document.getElementById('unencrypted_html').value;
|
||||||
downloadLink.attr('href', 'data:attachment/text,' + encodeURIComponent(renderedTmpl));
|
var passphrase = document.getElementById('passphrase').value;
|
||||||
downloadLink.removeAttr('disabled');
|
|
||||||
});
|
var encrypted = CryptoJS.AES.encrypt(unencrypted, passphrase);
|
||||||
|
var hmac = CryptoJS.HmacSHA256(encrypted.toString(), CryptoJS.SHA256(passphrase)).toString();
|
||||||
|
var encryptedMsg = hmac + encrypted;
|
||||||
|
|
||||||
|
var pageTitle = document.getElementById('title').value.trim();
|
||||||
|
var instructions = document.getElementById('instructions').value;
|
||||||
|
var data = {
|
||||||
|
title: pageTitle ? pageTitle : 'Protected Page',
|
||||||
|
instructions: instructions ? instructions : '',
|
||||||
|
encrypted: encryptedMsg
|
||||||
};
|
};
|
||||||
|
|
||||||
$('#encrypt_form').submit(function (e) {
|
document.getElementById('encrypted_html_display').textContent = encryptedMsg;
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
var unencrypted = $('#unencrypted_html').val();
|
renderTemplate(data);
|
||||||
var passphrase = $('#passphrase').val();
|
});
|
||||||
|
|
||||||
var encrypted = CryptoJS.AES.encrypt(unencrypted, passphrase);
|
document.getElementById('toggle-extra-option')
|
||||||
var hmac = CryptoJS.HmacSHA256(encrypted.toString(), CryptoJS.SHA256(passphrase)).toString();
|
.addEventListener('click', function (e) {
|
||||||
var encryptedMsg = hmac + encrypted;
|
e.preventDefault();
|
||||||
|
document.getElementById('extra-options').classList.toggle('hidden');
|
||||||
|
});
|
||||||
|
|
||||||
var pageTitle = $.trim($('#title').val());
|
document.getElementById('toggle-concept')
|
||||||
var instructions = $('#instructions').val();
|
.addEventListener('click', function (e) {
|
||||||
var data = {
|
e.preventDefault();
|
||||||
title: pageTitle ? pageTitle : 'Protected Page',
|
document.getElementById('concept').classList.toggle('hidden');
|
||||||
instructions: instructions ? instructions : '',
|
|
||||||
encrypted: encryptedMsg
|
|
||||||
};
|
|
||||||
|
|
||||||
$('#encrypted_html_display').text(encryptedMsg);
|
|
||||||
|
|
||||||
renderTemplate(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#toggle-extra-option').click(function () {
|
|
||||||
$('#extra-options').toggleClass('hidden');
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#toggle-concept').click(function () {
|
|
||||||
$('#concept').toggleClass('hidden');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
2445
jsrender.js
2445
jsrender.js
Plik diff jest za duży
Load Diff
|
@ -2,7 +2,7 @@
|
||||||
<html class="staticrypt-html">
|
<html class="staticrypt-html">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>{{:title}}</title>
|
<title>{title}</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<!-- do not cache this page -->
|
<!-- do not cache this page -->
|
||||||
|
@ -112,8 +112,8 @@
|
||||||
<div class="staticrypt-page">
|
<div class="staticrypt-page">
|
||||||
<div class="staticrypt-form">
|
<div class="staticrypt-form">
|
||||||
<div class="staticrypt-instructions">
|
<div class="staticrypt-instructions">
|
||||||
<p class="staticrypt-title">{{:title}}</p>
|
<p class="staticrypt-title">{title}</p>
|
||||||
<p>{{:instructions}}</p>
|
<p>{instructions}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="staticrypt-hr">
|
<hr class="staticrypt-hr">
|
||||||
|
@ -134,34 +134,29 @@
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
<script
|
|
||||||
src="https://code.jquery.com/jquery-3.2.1.min.js"
|
|
||||||
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
|
|
||||||
crossorigin="anonymous"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
document.getElementById('staticrypt-form').addEventListener('submit', function (e) {
|
||||||
$('#staticrypt-form').submit(function (e) {
|
e.preventDefault();
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
var passphrase = $('#staticrypt-password').val();
|
var passphrase = document.getElementById('staticrypt-password').value
|
||||||
var encryptedMsg = '{{:encrypted}}';
|
var encryptedMsg = '{encrypted}';
|
||||||
|
|
||||||
var encryptedHMAC = encryptedMsg.substring(0, 64);
|
var encryptedHMAC = encryptedMsg.substring(0, 64);
|
||||||
var encryptedHTML = encryptedMsg.substring(64);
|
var encryptedHTML = encryptedMsg.substring(64);
|
||||||
|
|
||||||
var decryptedHMAC = CryptoJS.HmacSHA256(encryptedHTML, CryptoJS.SHA256(passphrase)).toString();
|
var decryptedHMAC = CryptoJS.HmacSHA256(encryptedHTML, CryptoJS.SHA256(passphrase)).toString();
|
||||||
|
|
||||||
if (decryptedHMAC !== encryptedHMAC) {
|
if (decryptedHMAC !== encryptedHMAC) {
|
||||||
alert('Bad passphrase !');
|
alert('Bad passphrase !');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var plainHTML = CryptoJS.AES.decrypt(encryptedHTML, passphrase).toString(CryptoJS.enc.Utf8);
|
var plainHTML = CryptoJS.AES.decrypt(encryptedHTML, passphrase).toString(CryptoJS.enc.Utf8);
|
||||||
|
|
||||||
document.write(plainHTML);
|
document.write(plainHTML);
|
||||||
});
|
document.close();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Ładowanie…
Reference in New Issue