Greasy Fork

密码生成器

每次访问一个网页,会生成一个对应密码,按F12在控制台查看

// ==UserScript==
// @name         密码生成器
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  每次访问一个网页,会生成一个对应密码,按F12在控制台查看
// @author       hlmio
// @match        *://*/*
// @require      https://cdn.jsdelivr.net/npm/[email protected]/md5.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    // 配置变量
    var 核心秘钥 = "hlmio"
    var 密码长度 = 16
    var 为了满足大小写和特殊字符_添加的后缀 = "@Aa1"
    var 第一次md5后_交换哪几位字符_可选值为1到32 = [2,4,8,16,32]
    var 第一次md5后_删掉哪几位字符_可选值为1到32 = [1,3,7,15,31]

    var 自动获取的辅助秘钥_域名 = window.location.host
    var 秘钥 = 核心秘钥 + 自动获取的辅助秘钥_域名

    var 第一次md5后的结果 = md5(秘钥)
    var md5数组 = 第一次md5后的结果.split('')
    // 换位
    var 位数数组 = 第一次md5后_交换哪几位字符_可选值为1到32
    位数数组.forEach(function (item) {
        交换数组的两位内容(md5数组,0,item-1)
    })
    // 删位
    位数数组 = 第一次md5后_删掉哪几位字符_可选值为1到32
    位数数组.forEach(function (item) {
        md5数组[item-1] = "-1"
    })
    for(let i=md5数组.length-1; i>=0; i--){
        if(md5数组[i]=="-1"){
            md5数组.splice(i,1)
        }
    }
    第一次md5后的结果 = md5数组.join('')
    var 第二次md5后的结果 = md5(第一次md5后的结果)

    var 后缀 = 为了满足大小写和特殊字符_添加的后缀
    var 保留位数 = 密码长度 - 后缀.length
    var 最终密码 = 第二次md5后的结果.substr(0,保留位数) + 后缀
    最终密码 = 末尾补0(最终密码,密码长度)
    console.log("" + 自动获取的辅助秘钥_域名 + " 最终密码:")
    console.log(最终密码)

})();

function 末尾补0(最终密码,密码长度){
    if(最终密码.length >= 密码长度){
        return 最终密码
    }
    let 补几个0 = 密码长度 - 最终密码.length
    for(let i=0; i<补几个0; i++){
        最终密码 += "0"
    }
    return 最终密码
}

function 交换数组的两位内容(数组,第一位,第二位){
    let a = 数组[第一位]
    let b = 数组[第二位]
    数组.splice(第一位,1,b)
    数组.splice(第二位,1,a)
}