jspass

    @@ -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 です。

History

  1. 2011/01/30 14:32:15 - 2011-01-30
  2. 2011/01/22 18:07:47 - 2011-01-22
  3. 2011/01/22 17:42:21 - 2011-01-22
  4. 2011/01/22 17:34:32 - 2011-01-22
  5. 2011/01/21 21:02:15 - 2011-01-21
  6. 2011/01/21 20:58:18 - 2011-01-21
  7. 2011/01/21 20:52:16 - 2011-01-21
  8. 2011/01/21 20:41:04 - 2011-01-21
  9. 2011/01/21 20:28:12 - 2011-01-21
  10. 2011/01/21 20:05:50 - 2011-01-21
  11. 2011/01/21 19:20:07 - 2011-01-21
  12. 2011/01/21 19:15:32 - 2011-01-21
  13. 2011/01/20 21:05:03 - 2011-01-20
  14. 2011/01/20 20:47:30 - 2011-01-20
  15. 2011/01/20 20:27:32 - 2011-01-20