jspass

    @@ -7,7 +7,6 @@ * @require http://pajhome.org.uk/crypt/md5/2.2/md5-min.js * @require jQuery */ -(function(){ function hexstr2bin(str) { var binstr = ''; @@ -99,5 +98,3 @@ }) ) ); - -}())
  • /*
     * @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 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 userele = $('#username,#username_or_email,input[name$="ccount"]')
    var passele = $('#password,input[name$="assword"]')
    
    var url = localStorage.getItem(id['url']);
    if (!url) {
      url = location.href;
      var pos = url.indexOf('/',9) + 1;
      url = url.substr(0, pos);
    }
    
    var user = localStorage.getItem(id['user']) || userele.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['url'], url);
        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);
        userele.val(user);
        passele.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