赞
踩
此小工具是我突发奇想想的一个密码加密算法, 通过对一个小数的幂指数的不断迭代运算, 可以取得完全打乱字符排列的效果, 用户只要略微更改这密码初值,密码模板,计算指数中的任何一个, 所运算的结果都千差万别,毫无规律。
该小工具完全采用原生js编写,方便用户更改代码, 没有应用任何外部资源, 完全可以断网使用。
- <!DOCTYPE html>
- <html>
-
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no" />
- <title>简单密码生成器</title>
- <style type="text/css">
- html,
- body {
- padding: 0;
- margin: 0;
- }
-
- .password-create {
- margin: 5px auto;
- border: 1px solid gray;
- box-shadow: rgba(0, 0, 0, .5) 2px 3px 10px;
- border-radius: 0;
- width: calc(100% - 10px);
- box-sizing: border-box;
- overflow-x: hidden;
- padding: 10px;
- min-width: 340px;
- max-width: 500px;
- }
-
- .password-create-title {
- color: black;
- font-size: 18px;
- font-weight: bold;
- padding: 5px;
- margin-bottom: 5px;
- }
-
- .row {
- width: 100%;
- height: 55px;
- margin-bottom: 0;
- display: flex;
- justify-content: flex-start;
- align-items: center;
- }
-
- .input_label {
- height: 32px;
- display: flex;
- justify-content: flex-end;
- align-items: center;
- text-align: right;
- width: 80px;
- font-size: 16px;
- }
-
- .input-text {
- height: 32px;
- display: flex;
- justify-content: flex-start;
- align-items: center;
- padding-left: 5px;
- margin-left: 5px;
- width: calc(100% - 160px);
- font-size: 16px;
- }
-
- .btn {
- width: 120px;
- height: 40px;
- display: inline-flex;
- justify-content: center;
- align-items: center;
- color: white;
- background: rgb(54, 211, 153);
- font-size: 16px;
- cursor: pointer;
- border: 0px solid rgb(54, 211, 153);
- outline: none;
- }
-
- .btn:active {
- opacity: 0.8;
- }
-
- .input-checkbox {
- width: 20px;
- height: 20px;
- }
-
- a {
- text-decoration: none;
- }
-
- .hint-span {
- color: red;
- }
-
- .msg {
- color: red;
- font-size: 20px;
- font-weight: bold;
- padding-left: 20px;
- box-sizing: border-box;
- }
-
- .btn-row {
- justify-content: flex-end;
- text-align: right;
- padding-right: 2%;
- box-sizing: border-box;
- margin-top: 10px;
- }
-
- .readme p {
- margin: 5px 0;
- padding: 0;
- font-size: 18px;
- font-weight: bold;
- color: #333;
- }
-
- .readme ul {
- list-style-type: none;
- padding: 0;
- margin: 0;
- }
-
- .readme li {
- padding: 5px;
- margin: 0;
- font-size: 16px;
- color: #666;
- line-height: 26px;
- }
-
- .readme .demo-img {
- width: 100%;
- }
-
- .input-select {
- position: relative;
- margin-left: 5px;
- width: calc(100% - 160px);
- font-size: 16px;
- box-sizing: border-box;
- }
-
- .input-select input {
- height: 36px;
- display: flex;
- justify-content: flex-start;
- align-items: center;
- width: 100%;
- font-size: 16px;
- padding-left: 10px;
- box-sizing: border-box;
- }
-
- .input-select input:focus+.select-wrap {
- display: block;
- }
-
- .input-select:focus .select-wrap {
- display: block;
- }
-
- .input-select .select-wrap {
- display: none;
- box-sizing: border-box;
- position: absolute;
- width: 100%;
- z-index: 1;
- top: 100%;
- left: 0;
- padding: 5px;
- background-color: white;
- box-shadow: rgba(0, 0, 0, .5) 2px 3px 10px;
- }
-
- .input-select .select-wrap .select-option {
- height: 32px;
- display: flex;
- justify-content: flex-start;
- align-items: center;
- font-size: 16px;
- color: #333;
- padding: 5px 10px;
- cursor: pointer;
- user-select: none;
- border-bottom: 1px dashed #eee;
- }
-
- .input-select .select-wrap .select-option:active {
- opacity: 0.8;
- background-color: #f2f2f2;
- }
- </style>
- </head>
-
- <body>
- <div class="password-create">
- <div class="password-create-title">
- 密码生成器
- </div>
- <div id="msg" class="row msg"></div>
- <div class="row">
- <label for="seedValue" class="input_label">
- <span class="hint-span">*</span>
- 密码初值:
- </label>
- <div class="input-select" tabindex="0">
- <input type="text" id="seedValueInput" value="" placeholder="请输入密码初始值" />
- </div>
- <a href="javascript:;" id="clearSeedValueBtn"> 清空</a>
- </div>
- <div class="row">
- <label for="pwdTpl" class="input_label">
- <span class="hint-span">*</span>
- 密码模板:
- </label>
- <div class="input-select" tabindex="0">
- <input type="text" id="pwdTplInput" value="" list="pwdTplDataList" placeholder="请输入密码生成模板" />
- <div class="select-wrap" id="pwdTplDataList"></div>
- </div>
- <a href="javascript:;" id="clearPwdTplBtn"> 清空</a>
- </div>
- <div class="row">
- <label for="createPowInput" class="input_label">
- <span class="hint-span">*</span>
- 计算指数:
- </label>
- <div class="input-select" tabindex="0">
- <input type="text" id="createPowInput" value="" placeholder="计算指数为小于10的8-15位小数" />
- <div class="select-wrap" id="createPowList"></div>
- </div>
- <a href="javascript:;" id="clearCreatePowBtn"> 清空</a>
- </div>
- <div class="row btn-row">
- <input type="button" id="createBtn" class="btn" value="生成密码" />
- </div>
- <div class="readme">
- <p>下载地址: <a style="font-size: 16px;" href="./pwd.html"
- download='pwd.html'>点此下载该工具</a></p>
- <p>使用说明: </p>
- <ul>
- <li>
- 1. 密码初值: 用于生成密码的种子, 可以看做为明密, 可以为任何字符, 可以包含汉字, 长度限制30个字符
- </li>
- <li>
- 2. 密码模板: 用于生成密码的模板, 最终生成的密码格式, 包含数字, 大写字母, 小写字母和特殊字符, 长度限制30个字符
- </li>
- <li>
- 3. 计算指数: 用于密码计算的指数, 该数字为一个小于10的8-15位小数, 最好为一个无理数的计算结果取前15位
- </li>
- <li>
- 4. 把这个文件保存自己的手机或电脑上, 首次使用时一定要自己修改这个文件的模板数据, 不要用这个默认的示例
- </li>
- <li>
- <img class="demo-img"
- src="data:image/png;base64,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" />
- </li>
- </ul>
- </div>
- </div>
-
- <script type="text/javascript">
- "use strict";
-
- let PasswordUtil = function () {
- // 此处的配置一定要自行修改, 不要用这个默认的配置
- let pwdConfig = {
- numberMap: "1234567890",// 所有的数字
- uppercaseMap: "abcdefghijklmnopqrstuvwxyz",// 所有的小写字母
- lowercaseMap: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",// 所有的大写字母
- specialCharacterMap: "~!@#$%^&*()_+-=|/\<>,.;:[]{}",// 所有的特殊字符
- randomPow: Math.PI + 1, // 打乱排序的计算指数, 一个杂乱无章的小数 如: 3.141592653589793, 小数位数最多为15位
- createPow: Math.E + 2, // 生成密码计算指数, 一个杂乱无章的小数 如: 2.718281828459045, 小数位数最多为15位
- }
-
- try {
- charMapRandom()
- } catch (e) {
- console.error(e)
- }
-
- function getRandomChar(s, randomIndex) {
- let ch = "";
- if (pwdConfig.numberMap.indexOf(s) > -1) {
- ch = "" + pwdConfig.numberMap[randomIndex % pwdConfig.numberMap.length];
- } else if (pwdConfig.uppercaseMap.indexOf(s) > -1) {
- ch = pwdConfig.uppercaseMap[randomIndex % pwdConfig.uppercaseMap.length];
- } else if (pwdConfig.lowercaseMap.indexOf(s) > -1) {
- ch = pwdConfig.lowercaseMap[randomIndex % pwdConfig.lowercaseMap.length];
- } else if (pwdConfig.specialCharacterMap.indexOf(s) > -1) {
- ch = pwdConfig.specialCharacterMap[randomIndex % pwdConfig.specialCharacterMap.length];
- }
- return ch;
- }
-
- function getCharWeight(s) {
- let weight = 1;
-
- if (pwdConfig.numberMap.indexOf(s) > -1) {
- weight = 2;
- } else if (pwdConfig.uppercaseMap.indexOf(s) > -1) {
- weight = 3;
- } else if (pwdConfig.lowercaseMap.indexOf(s) > -1) {
- weight = 4;
- } else if (pwdConfig.specialCharacterMap.indexOf(s) > -1) {
- weight = 5;
- }
- return weight;
- }
-
- // 打乱字符顺序
- function charMapRandom() {
- randowMap("numberMap")
- randowMap("uppercaseMap")
- randowMap("lowercaseMap")
- randowMap("specialCharacterMap")
-
- function randowMap(filedName) {
- let charArr = pwdConfig[filedName].split("")
- let len = charArr.length
- let precision = 12
- for (let i = 0; i < len; i++) {
- let randomNum = Math.pow(i + 1, pwdConfig.randomPow).toFixed(precision)
- let randomNumArr = randomNum.split(".")[1].split("").reverse()
- let randomIndex = parseInt(randomNumArr[0] + randomNumArr[precision / 2] + randomNumArr[precision - 1])
- let toIndex = randomIndex % len
- let temp = charArr[toIndex]
- charArr[toIndex] = charArr[i]
- charArr[i] = temp
- }
- pwdConfig[filedName] = charArr.join("")
- }
- }
-
- // 生成密码
- function createPwd(seedStr, pwdTpl, createPow) {
- let seedArr = seedStr.split("")
- let pwdTplArr = pwdTpl.split("")
- createPow = createPow || pwdConfig.createPow
-
- let seedCodeArr = [];
- seedArr.forEach(function (ch, index) {
- seedCodeArr.push(ch.charCodeAt());
- });
-
- let seedSum = 0;
- seedCodeArr.forEach(function (item, index) {
- seedSum += item * 1 + index;
- });
-
- let pwd = ""
- let pwdTplLen = pwdTplArr.length
- let seedLen = seedArr.length
- let precision = 12
- let charWeightSum = pwdTplLen
- for (let i = 0; i < pwdTplLen; i++) {
- let type = pwdTplArr[i];
- charWeightSum += getCharWeight(type);
- let randomNum = Math.pow((seedSum + charWeightSum) / (3 * i + 1), pwdConfig.createPow).toFixed(precision);
- let randomNumArr = randomNum.split(".")[1].split("").reverse();
- let randomIndex = parseInt(randomNumArr[0] + randomNumArr[precision / 2] + randomNumArr[precision - 1]);
- pwd += getRandomChar(type, randomIndex);
- }
- return pwd;
- }
-
- return {
- pwdConfig,
- createPwd,
- };
- }();
-
- setTimeout(() => {
- appInit()
- }, 0)
-
- function appInit() {
- // 密码模板选项数据
- let allPwdTplDataOptions = [
- "123456",
- "12345678",
- "aaa123456",
- "aa#123456",
- "Aaa123456",
- "Aaa#123456",
- "Aaa#12345678"
- ]
- // 计算指数选项数据
- let allCreatePowOptions = [
- 3.141592653589793,
- 2.718281828459045,
- 1.414213562373095,
- 1.732050807568877,
- 2.645751311064591,
- ]
-
- let seedValueInputEl = document.getElementById("seedValueInput")
- let clearSeedValueBtnEl = document.getElementById("clearSeedValueBtn")
- let pwdTplInputEl = document.getElementById("pwdTplInput")
- let clearPwdTplBtnEl = document.getElementById("clearPwdTplBtn")
- let createPowInputEl = document.getElementById("createPowInput")
- let clearCreatePowBtnEl = document.getElementById("clearCreatePowBtn")
- let createBtn = document.getElementById("createBtn")
-
- let pwdTplInputSelect = createSelect("pwdTplInput", "pwdTplDataList")
- let createPowSelect = createSelect("createPowInput", "createPowList")
- pwdTplInputSelect.setData(allPwdTplDataOptions, false)
- createPowSelect.setData(allCreatePowOptions, true)
-
- // 清空输入框
- clearSeedValueBtnEl.addEventListener("click", function (e) {
- seedValueInputEl.value = ""
- }, false)
- clearPwdTplBtnEl.addEventListener("click", function (e) {
- pwdTplInputEl.value = ""
- }, false)
- clearCreatePowBtnEl.addEventListener("click", function (e) {
- createPowInputEl.value = ""
- }, false)
-
- // 点击生成密码
- createBtn.addEventListener("click", function (e) {
- let seedValue = seedValueInputEl.value.trim()
- let pwdTpl = pwdTplInputEl.value.trim()
- let createPow = createPowInputEl.value
- if (!seedValue) {
- printMsg("请输入密码初始值")
- return false;
- }
- if (!pwdTpl) {
- printMsg("请输入密码生成模板")
- return false;
- }
- if (!checkInputValue(pwdTpl)) {
- printMsg("密码生成模板不能包含非法字符")
- return false;
- }
- if (seedValue.length > 30) {
- printMsg("密码初始值不能超过30个字符!")
- return false;
- }
- if (pwdTpl.length > 30) {
- printMsg("密码模板不能超过30个字符!")
- return false;
- }
- if (!myUtil.isNumeric(createPow)) {
- printMsg("请输入计算指数!")
- return false;
- }
- let createPowDotIndex = createPow.indexOf(".")
- if (createPowDotIndex == -1 || createPow * 1 > 10) {
- printMsg("计算指数必须为小于10的小数!")
- return false;
- }
- let createPowDecimal = createPow.substring(createPowDotIndex + 1)
- if (createPowDecimal.length > 15 || createPowDecimal.length < 8) {
- printMsg("计算指数小数位数必须为8-15位!")
- return false;
- }
- PasswordUtil.pwdConfig.createPow = createPow * 1
- let pwdStr = PasswordUtil.createPwd(seedValue, pwdTpl)
- printMsg(`<span style="color:#36d49a">${pwdStr}</span>`)
- }, false)
-
- function printMsg(htmlMsg) {
- let msgEl = document.getElementById("msg")
- if (msgEl) {
- msgEl.innerHTML = htmlMsg
- }
- }
-
- function checkInputValue(value) {
- let valueArr = value.split("")
- let allStr = PasswordUtil.pwdConfig.numberMap + PasswordUtil.pwdConfig.uppercaseMap +
- PasswordUtil.pwdConfig.lowercaseMap + PasswordUtil.pwdConfig.specialCharacterMap;
- for (let i = 0; i < valueArr.length; i++) {
- if (allStr.indexOf(valueArr[i]) == -1) {
- return false
- }
- }
- return true
- }
-
- function refreshDataList(id, dataList) {
- let html = "";
- dataList.forEach(function (val) {
- html += '<option value="' + val + '" />';
- });
- let dataListEl = document.getElementById(id);
- if (dataListEl) {
- dataListEl.innerHTML = html;
- }
- }
-
- function createSelect(inputId, inputListId) {
- let inputEl = document.getElementById(inputId)
- let inputListEl = document.getElementById(inputListId)
- let allDataList = []
- let showDataList = []
-
- inputEl.addEventListener("input", function (e) {
- refreshData()
- })
- inputEl.addEventListener("focus", function (e) {
- refreshData()
- })
-
- inputListEl.addEventListener("click", function (e) {
- if (e.target.classList.contains("select-option")) {
- let item = e.target.dataset.item
- inputEl.value = item
- inputListEl.parentNode.blur()
- }
- })
-
- function refreshData() {
- let inputValue = inputEl.value.trim()
- let showDataList = allDataList
- // 过滤选项
- // if (inputValue) {
- // showDataList = allDataList.filter((item) => {
- // return (item + "").indexOf(inputValue) > -1
- // })
- // }
- let html = "";
- showDataList.forEach(function (item, index) {
- html += `<div data-index="${index}" data-item="${item}" class="select-option">${item}</div>`;
- });
- if (showDataList.length == 0) {
- html += `<div data-index="-1" data-item="" class="select-option">暂无符合条件的数据</div>`;
- }
- inputListEl.innerHTML = html;
- }
- function setData(dataList, isInit) {
- allDataList = dataList
- if (isInit && !inputEl.value && dataList.length > 0) {
- inputEl.value = allDataList[0]
- }
- refreshData()
- }
- return {
- setData
- }
- }
- };
- </script>
-
- <script type="text/javascript">
- "use strict";
- window.myUtil = (function () {
- function isType(val) {
- return Object.prototype.toString.call(val).slice(8, -1);
- }
-
- function isObject(val) {
- return isType(val) === 'Object';
- }
-
- function isArray(val) {
- return isType(val) === 'Array';
- }
-
- function isFunction(val) {
- return isType(val) === 'Function';
- }
-
- function isNumeric(val) {
- return (!Number.isNaN(parseFloat(val))) && Number.isFinite(Number(val));
- }
-
- let sessionStorage = window.sessionStorage;
- let localStorage = window.localStorage;
-
- function saveDataToLocal(saveName, obj, isSessionStorage = true, expireTime) {
- if (obj === null) {
- if (isSessionStorage) {
- sessionStorage.removeItem(saveName)
- } else {
- localStorage.removeItem(saveName)
- }
- return;
- }
- if (obj && (isObject(obj) || isArray(obj))) {
- if (isSessionStorage) {
- sessionStorage.setItem(saveName, JSON.stringify(obj))
- } else {
- localStorage.setItem(saveName, JSON.stringify(obj))
- }
- } else {
- if (isSessionStorage) {
- sessionStorage.setItem(saveName, obj)
- } else {
- localStorage.setItem(saveName, obj)
- }
- }
- //存过期时间
- if (expireTime) {
- let expireTimeObjStr = JSON.stringify({
- time: new Date().getTime(),
- expireTime: expireTime
- });
- if (isSessionStorage) {
- sessionStorage.setItem(saveName + "ExpireTime", expireTimeObjStr)
- } else {
- localStorage.setItem(saveName + "ExpireTime", expireTimeObjStr)
- }
- }
- }
-
- function readDataFromLocal(readName, isSessionStorage = true) {
- let dataStr = null;
- let data = null;
- if (isSessionStorage) {
- dataStr = sessionStorage.getItem(readName);
- } else {
- dataStr = localStorage.getItem(readName);
- }
- if (dataStr && typeof dataStr == 'string') {
- //如果过期直接返回null
- let expireTimeObj = readDataFromLocal(readName + "ExpireTime", isSessionStorage);
- if (expireTimeObj) {
- if ((new Date().getTime() - expireTimeObj.time) >= expireTimeObj.expireTime) {
- saveDataToLocal(readName, null, isSessionStorage);
- return null;
- }
- }
- let first = dataStr.charAt(0);
- //如果是数组或对象
- if (first === '{' || first === '[') {
- data = JSON.parse(dataStr);
- } else {
- //尝试保持原始数据类型
- try {
- data = JSON.parse(dataStr);;
- } catch (e) {
- data = dataStr;
- }
- }
- } else {
- data = dataStr;
- }
- return data;
- }
-
- return {
- isType,
- isObject,
- isNumeric,
- saveDataToLocal,
- readDataFromLocal
- }
-
- })()
- </script>
- </body>
-
- </html>

demo地址: 简单密码生成器
github源码: GitHub - chengxg/simple-create-password: 简单的密码生成器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。