-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
104 lines (96 loc) · 3.55 KB
/
index.html
File metadata and controls
104 lines (96 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
<script>
var pwDB = [
{"auth":"bash.org","iden":"AzureDiamond","pass":"uhagre5"},
{"auth":"example.com","iden":"user","pass":"cnff"},
];
function makeSecret(pass, key) {
return rot(pass, key.length);
}
function breakSecret(ciphertext, key) {
return rot(ciphertext, 0-key.length);
}
function rot(stringIn, rotAmount) {
sets = [
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"abcdefghijklmnopqrstuvwxyz",
"0123456789",
];
var stringOut = "";
for (i in stringIn) {
var letter = stringIn[i];
for (j in sets) {
s = sets[j];
if (s.includes(letter)){
newIndex = (s.indexOf(letter) + rotAmount) % s.length;
newIndex = (newIndex + s.length) % s.length; // JS negative modulo workaround
//console.log(letter, s.indexOf(letter), newIndex, s[newIndex]);
letter = s[newIndex];
break;
}
}
stringOut += letter;
}
return stringOut;
}
function decrypt () {
if (document.getElementById('newPW').value == ""){
document.getElementById('newPW').value = JSON.stringify(pwDB);
} // Should run on init only
var master = document.getElementById('master').value;
if (master == "") {return;}
pwDB = JSON.parse(document.getElementById('newPW').value);
var out = document.getElementById('decoded');
for (i in pwDB){
entry = pwDB[i];
entry['pass'] = breakSecret(entry['pass'], master)
addOrUpdateDecodedEntry(entry);
}
}
function addOrUpdateDecodedEntry(e) {
authID = e['auth'] + '@' + e['iden'];
var target = document.getElementById(authID);
if (target == null){
var decoded = document.getElementById('decoded');
decoded.innerHTML += '<div id="' + authID + '"></div>';
target = document.getElementById(authID);
}
newContent = ""
newContent += "<hr />"
newContent += "" + e['iden'] + '<span style="font-weight: bold;"> @ </span>' + e['auth'] + '<br />';
newContent += '<input type="text" value="' + e['pass'] + '" />'
target.innerHTML = newContent;
}
function encrypt () {
var master = document.getElementById('master').value;
newAuth = document.getElementById('newAuth').value;
newIden = document.getElementById('newIden').value;
newPass = document.getElementById('newPass').value;
newPass = makeSecret(newPass, master);
var newPW = document.getElementById('newPW');
pwDB = [];
pwDB.push({'auth': newAuth, 'iden': newIden, 'pass': newPass});
newPW.value = JSON.stringify(pwDB);
}
</script>
</head>
<body onload="decrypt()">
<form>
Master passphrase:
<input type="password" id="master" oninput="decrypt()" onchange="decrypt()" />
<input type="button" value="decrypt" onclick="decrypt()" />
</form>
<hr />
New entry:<br />
Authority: <input type="text" id="newAuth" value="bash.org" /><br />
Identity: <input type="text" id="newIden" value="AzureDiamond" /><br />
Passphrase: <input type="password" id="newPass" value="hunter2" /><br />
<input type="button" value="encrypt" onclick="encrypt()" /><br />
<textarea id="newPW"></textarea><br />
<div id="decoded"></div>
</body>
</html>