jspass
by
ohac
2011-01-30 [2011/01/30 14:32:15]
アドレス、ユーザ名、SALT、マスターパスワードでパスワードを生成する。
@@ -34,6 +34,13 @@
var pos = url.indexOf('/',9) + 1;
url = url.substr(0, pos);
+var user = localStorage.getItem(id['user']) || $('#username').val();
+var salt = localStorage.getItem(id['salt']) || '';
+var strlen = localStorage.getItem(id['strlen']) || 12;
+var times = localStorage.getItem(id['times']) || 0;
+strlen = parseInt(strlen);
+times = parseInt(times);
+
$('body').prepend(
$('<div id=' + id['panel'] + ' style="margin:5px;padding:5px;position:absolute;widh:50%;border:1px solid gray;z-index:99999;background-color:white;">').css('top', $(window).scrollTop()
).append(
@@ -41,23 +48,23 @@
).append(
$('<br>')
).append(
- $('<input>').attr({id: id['user'], 'value': $('#username').val(), 'title': 'Username or e-mail', 'size': 20})
+ $('<input>').attr({id: id['user'], 'value': user, 'title': 'Username or e-mail', 'size': 20})
).append(
$('<br>')
).append(
- $('<input>').attr({id: id['master'], type: '', 'value': '', 'title': 'Master password', 'type': 'password', 'size': 20})
+ $('<input>').attr({id: id['master'], 'value': '', 'title': 'Master password', 'type': 'password', 'size': 20})
).append(
$('<br>')
).append(
- $('<input>').attr({id: id['strlen'], 'value': '12', 'title': 'Password length', 'size': 20})
+ $('<input>').attr({id: id['strlen'], 'value': strlen, 'title': 'Password length', 'size': 20})
).append(
$('<br>')
).append(
- $('<input>').attr({id: id['times'], 'value': '0', 'title': 'Strength', 'size': 20})
+ $('<input>').attr({id: id['times'], 'value': times, 'title': 'Strength', 'size': 20})
).append(
$('<br>')
).append(
- $('<textarea>').attr({id: id['salt'], 'cols': 76, 'rows': 10, 'title': 'Salt'}).text('')
+ $('<textarea>').attr({id: id['salt'], 'cols': 76, 'rows': 10, 'title': 'Salt'}).text(salt)
).append(
$('<br><input type="button" value="close">').click(function(){
$('#'+id['panel']).remove()
@@ -70,6 +77,10 @@
var master = $('#'+id['master']).val();
var strlen = $('#'+id['strlen']).val();
var times = $('#'+id['times']).val();
+ localStorage.setItem(id['user'], user);
+ localStorage.setItem(id['salt'], salt);
+ localStorage.setItem(id['strlen'], strlen);
+ localStorage.setItem(id['times'], times);
var str = url + salt + user + master;
for (var i = 0; i < times; i++) { str = str + str; }
var md5str = hex_md5(str);
/*
* @title jspass
* @description アドレス、ユーザ名、SALT、マスターパスワードでパスワードを生成する。
* @include http://*
* @license MIT License
* @require http://tociyuki.flop.jp/archive/base64.js
* @require http://pajhome.org.uk/crypt/md5/2.2/md5-min.js
* @require jQuery
*/
(function(){
function hexstr2bin(str) {
var binstr = '';
for (var i = 0; i < str.length; i += 2) {
var i8 = parseInt('0x' + str.substr(i, 2));
binstr += String.fromCharCode(i8);
}
return binstr;
}
var nm = 'jp_hatelabo_let_ohac_jspass_';
var id = {
'panel': nm + 'panel',
'url': nm + 'url',
'user': nm + 'user',
'salt': nm + 'salt',
'master': nm + 'master',
'strlen': nm + 'strlen',
'times': nm + 'times'
};
var url = location.href;
var pos = url.indexOf('/',9) + 1;
url = url.substr(0, pos);
var user = localStorage.getItem(id['user']) || $('#username').val();
var salt = localStorage.getItem(id['salt']) || '';
var strlen = localStorage.getItem(id['strlen']) || 12;
var times = localStorage.getItem(id['times']) || 0;
strlen = parseInt(strlen);
times = parseInt(times);
$('body').prepend(
$('<div id=' + id['panel'] + ' style="margin:5px;padding:5px;position:absolute;widh:50%;border:1px solid gray;z-index:99999;background-color:white;">').css('top', $(window).scrollTop()
).append(
$('<input>').attr({id: id['url'], 'value': url, 'title': 'Address', 'size': 76})
).append(
$('<br>')
).append(
$('<input>').attr({id: id['user'], 'value': user, 'title': 'Username or e-mail', 'size': 20})
).append(
$('<br>')
).append(
$('<input>').attr({id: id['master'], 'value': '', 'title': 'Master password', 'type': 'password', 'size': 20})
).append(
$('<br>')
).append(
$('<input>').attr({id: id['strlen'], 'value': strlen, 'title': 'Password length', 'size': 20})
).append(
$('<br>')
).append(
$('<input>').attr({id: id['times'], 'value': times, 'title': 'Strength', 'size': 20})
).append(
$('<br>')
).append(
$('<textarea>').attr({id: id['salt'], 'cols': 76, 'rows': 10, 'title': 'Salt'}).text(salt)
).append(
$('<br><input type="button" value="close">').click(function(){
$('#'+id['panel']).remove()
})
).append(
$('<input type="button" value="submit">').click(function(){
var url = $('#'+id['url']).val();
var user = $('#'+id['user']).val();
var salt = $('#'+id['salt']).val();
var master = $('#'+id['master']).val();
var strlen = $('#'+id['strlen']).val();
var times = $('#'+id['times']).val();
localStorage.setItem(id['user'], user);
localStorage.setItem(id['salt'], salt);
localStorage.setItem(id['strlen'], strlen);
localStorage.setItem(id['times'], times);
var str = url + salt + user + master;
for (var i = 0; i < times; i++) { str = str + str; }
var md5str = hex_md5(str);
var md5bin = hexstr2bin(md5str);
var pass = base64encode(md5bin).substr(0, strlen);
$('#username').val(user);
$('#password').val(pass);
$('#'+id['panel']).remove();
})
)
);
}())
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。