【晚风摇叶之随机密码生成器】随机生成密码
需求:想要生成位数不低于16的随机密码,而且要包含大小写字母,数字,特殊字符四类
用别人的在线生成器,生成的密码有个别没有数字或者特殊字符,验证方式就是,生成几个长度是4的密码,看一下生成的密码是否都包含这四类
自己简单写了一个js版和java版的
特点1:保证每个密码都包含四类,实现方式:先随机生成这四类各一个字符,比如aA1*,然后放到随机的位置上去,最后给剩余的位置随机取一个字符。
特点2:设置黑名单字符,有的字体或者软件上显示大写i和小写L分不清,如Il,把这两个排除,1可能也会分不清,也可以修改源码加上黑名单。
特点3:四种类型的字符出现的概率一样
js源码如下:
<html>
<head>
</head>
<body>
<div id="data">
</div>
</body>
<script>
function getRandom(start,end){// 随机数[start,end)return parseInt(Math.random()*(end-start)+start);
}
function getRandomWithout(start,end,without){// 随机数[start,end) TODO var r = parseInt(Math.random()*(end-start)+start);if(without.includes(r)){return getRandomWithout(start,end,without);}return r;
}var special = ['$','%','*','+','-',',','.','[',']'];
var blacklist = ['I','l'];
// a-z:97-122 A-Z:65-90 数字:48-57 特殊符号:
function getLetterLow(blacklist){var v = String.fromCharCode(getRandom(97,123));if(blacklist.includes(v)){return getLetterLow(blacklist);}return v;
}
function getLetterUp(blacklist){var v = String.fromCharCode(getRandom(65,91));if(blacklist.includes(v)){return getLetterUp(blacklist);}return v;
}
function getNumber(blacklist){var v = String.fromCharCode(getRandom(48,58));if(blacklist.includes(v)){return getNumber(blacklist);}return v;
}
function getSpecial(blacklist){var v = special[getRandom(0,special.length)];if(blacklist.includes(v)){return getSpecial(blacklist);}return v;
}var length = 16;
var count = 100;
for(var i=0;i<count;i++){var pwd = new Array(length);var r_index = new Array(4); // 随机的位置var r_index_index = 0;var r_index_data = new Object(); // 随机的位置上的数据// 随机一个小写字母,并到随机位置var r1 = getLetterLow(blacklist);var r1_index = getRandom(0,length);r_index[r_index_index] = r1_index;r_index_index++;r_index_data[r1_index] = r1;// 随机一个大写字母,并到随机位置var r2 = getLetterUp(blacklist);var r2_index = getRandomWithout(0,length,r_index);r_index[r_index_index] = r2_index;r_index_index++;r_index_data[r2_index] = r2;// 随机一个数字,并到随机位置var r3 = getNumber(blacklist);var r3_index = getRandomWithout(0,length,r_index);r_index[r_index_index] = r3_index;r_index_index++;r_index_data[r3_index] = r3;// 随机一个特殊字符,并到随机位置var r4 = getSpecial(blacklist);var r4_index = getRandomWithout(0,length,r_index);r_index[r_index_index] = r4_index;r_index_index++;r_index_data[r4_index] = r4;for(var j=0;j<length;j++){if(r_index.includes(j)){pwd[j] = r_index_data[j];}else{var type = getRandom(1,5);var data = '0';if(type==1){data = getLetterLow(blacklist);}else if(type==2){data = getLetterUp(blacklist);}else if(type==3){data = getNumber(blacklist);}else if(type==4){data = getSpecial(blacklist);}pwd[j] = data;}}var data = document.getElementById("data");var p=document.createElement("span");p.innerHTML=pwd.join('');data.appendChild(p);data.appendChild(document.createElement("br"));
}</script>
</html>
java代码如下:
package com.kingdee.eas.myutil;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class RandomPasswordUtil {private static final char[] LetterLow = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };private static final char[] LetterUP = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };private static final char[] Number = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };private static char[] Special = { '!', '#', '$', '%', '*', '+', '-', ',', '.', '?', '[', ']' };private static List<String> BlackList = new ArrayList<String>();public static List<String> getRandomPassword(int count, int length) {BlackList.add("I");BlackList.add("l");List<String> list = new ArrayList<String>();for (int i = 0; i < count; i++) {char[] pwd = new char[length];List<Integer> index = new ArrayList<Integer>();Map<Integer, Character> r_index_data = new HashMap<Integer, Character>();// 随机一个小写字母,并到随机位置char r1 = getLetterLow(BlackList); // 数据int r1_index = getRandom(0, length); // 位置index.add(r1_index);r_index_data.put(r1_index, r1);// 随机一个大写字母,并到随机位置char r2 = getLetterUp(BlackList); // 数据int r2_index = getRandomWithout(0, length, index);// 位置index.add(r2_index);r_index_data.put(r2_index, r2);// 随机一个数字,并到随机位置char r3 = getNumber(BlackList); // 数据int r3_index = getRandomWithout(0, length, index);// 位置index.add(r3_index);r_index_data.put(r3_index, r3);// 随机一个特殊字符,并到随机位置char r4 = getSpecial(BlackList); // 数据int r4_index = getRandomWithout(0, length, index);// 位置index.add(r4_index);r_index_data.put(r4_index, r4);for (int j = 0; j < length; j++) {if (r_index_data.containsKey(j)) {pwd[j] = r_index_data.get(j);} else {int type = getRandom(1, 5);char data = '0';if (type == 1) {data = getLetterLow(BlackList);} else if (type == 2) {data = getLetterUp(BlackList);} else if (type == 3) {data = getNumber(BlackList);} else if (type == 4) {data = getSpecial(BlackList);}pwd[j] = data;}}list.add(String.valueOf(pwd));}return list;}private static char getLetterLow(List<String> blacklist) {char v = LetterLow[getRandom(0, LetterLow.length)];if (blacklist.contains(v)) {return getLetterLow(blacklist);}return v;}private static char getLetterUp(List<String> blacklist) {char v = LetterUP[getRandom(0, LetterUP.length)];if (blacklist.contains(v)) {return getLetterUp(blacklist);}return v;}private static char getNumber(List<String> blacklist) {char v = Number[getRandom(0, Number.length)];if (blacklist.contains(v)) {return getNumber(blacklist);}return v;}private static char getSpecial(List<String> blacklist) {char v = Special[getRandom(0, Special.length)];if (blacklist.contains(v)) {return getSpecial(blacklist);}return v;}private static int getRandom(int start, int end) {return (int) (Math.random() * (end - start) + start);}private static int getRandomWithout(int start, int end, List<Integer> without) {int r = (int) (Math.random() * (end - start) + start);if (without.contains(r)) {return getRandomWithout(start, end, without);}return r;}public static void main(String[] args) {List<String> list = getRandomPassword(100, 4);for (String s : list) {System.out.println(s);}}
}
相关文章:
【晚风摇叶之随机密码生成器】随机生成密码
需求:想要生成位数不低于16的随机密码,而且要包含大小写字母,数字,特殊字符四类 用别人的在线生成器,生成的密码有个别没有数字或者特殊字符,验证方式就是,生成几个长度是4的密码,看…...
Spring Cache
什么是Spring Cache? Spring Cache是Spring框架的一个模块,它提供了对应用程序方法级别的缓存支持。通过使用Spring Cache,您可以在方法的结果被计算后,将其缓存起来,从而避免相同输入导致的重复计算。 Spring Cache…...

em3288 linux_4.19 sd卡调试
默认配置,根据实际配置即可。...
前端vue uni-app cc-countdown倒计时组件
随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高。在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一发而动全身的情况。为了解决这个问题,我们采用了组件化的开发模式。通过组…...

fifo读写的数据个数
fifo IP核设置读写个数 如果不勾选精确值,则统计的当前写入和待读出的数据为估计值,可能会相差2个左右。且fifo设计的wr_data_count. wr_data_count:当前的fifo中剩余已经写入的数据。 rd_data_count:当前的fifo中剩余可以读出…...

Java之Map接口
文章目录 简述Map中key-value特点 Map接口的常用方法Map的主要实现类:HashMapHashMap概述 Map实现类之二:LinkedHashMapMap实现类之三:TreeMapMap实现类之四:Hashtable(古老实现类)Map实现类之五࿱…...
windows系统中的命令行可以用python,pip等命令(已在系统中添加过python环境变量),但是pycharm的terminal中无法使用。
如果你已经在Windows系统中添加了Python环境变量,那么在命令行中使用python和pip命令应该是没有问题的。但是在PyCharm的Terminal中无法使用这些命令,可能是因为PyCharm的Terminal使用的是自己的虚拟环境,而不是系统环境。 你可以尝试在PyCh…...
编译 OneFlow 模型
本篇文章译自英文文档 Compile OneFlow Models tvm 0.14.dev0 documentation 作者是 BBuf (Xiaoyu Zhang) GitHub 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 本文介…...

【kubernetes】k8s单master集群环境搭建及kuboard部署
k8s入门学习环境搭建 学习于许大仙: https://www.yuque.com/fairy-era k8s官网 https://kubernetes.io/ kuboard官网 https://kuboard.cn/ 基于k8s 1.21.10版本 前置环境准备 一主两从,三台虚拟机 CPU内存硬盘角色主机名IPhostname操作系统4C16G50Gmasterk8s-mast…...

0802|IO进程线程 day5 进程概念
一、进程的基础 1.1 什么是进程 1)进程是程序的一次执行过程 程序:是静态的,它是存储在外存上的可执行二进制文件;进程:动态的概念,它是程序的一次执行过程,包括了进程的创建,调度、…...

4 Promethues监控主机和容器
目录 目录 1. 监控节点 1.1 安装Node exporter 解压包 拷贝至目标目录 查看版本 1.2 配置Node exporter 1.3 配置textfile收集器 1.4 启动systemd收集器 1.5 基于Docker节点启动node_exporter 1.6 抓取Node Exporter 1.7 过滤收集器 2. 监控Docker容器 2.1 运行cAdviso…...

亚马逊买家账号ip关联怎么处理
对于亚马逊买家账号,同样需要注意IP关联问题。在亚马逊的眼中,如果多个买家账号共享相同的IP地址,可能会被视为潜在的操纵、违规或滥用行为。这种情况可能导致账号受到限制或处罚。 处理亚马逊买家账号IP关联问题,建议采取以下步骤…...

NO4 实验四:生成Web工程
1、说明 使用 mvn archetype:generate 命令生成 Web 工程时,需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法: 2、操作 注意:如果在上一个工程的目录下执行 mvn archetype&…...

【linux】进程
文章目录 前言一、概念基本概念进程-PCBtask_structtask_struct内容分类 二、查看和创建进程查看进程PID创建进程 三、进程状态五、僵尸进程和孤儿进程僵尸进程孤儿进程获取进程退出码 四、进程优先级基本概念查看系统进程PRI and NI用top命令更改已存在进程的nice 前言 我们常…...

电商高并发设计之SpringBoot整合Redis实现布隆过滤器
文章目录 问题背景前言布隆过滤器原理使用场景基础中间件搭建如何实现布隆过滤器引入依赖注入RedisTemplate布隆过滤器核心代码Redis操作布隆过滤器验证 总结 问题背景 研究布隆过滤器的实现方式以及使用场景 前言 本篇的代码都是参考SpringBootRedis布隆过滤器防恶意流量击穿缓…...
SpringBoot第25讲:SpringBoot集成MySQL - MyBatis 注解方式
SpringBoot第25讲:SpringBoot集成MySQL - MyBatis 注解方式 本文是SpringBoot第25讲,上文主要介绍了Spring集成MyBatis访问MySQL,采用的是XML配置方式;我们知道除了XML配置方式,MyBatis还支持注解方式。本文主要介绍Sp…...

服务器返回 413 Request Entity Too Large
问题 上传一个大于1.5M的文件时,报错:413 Request Entity Too Large 使用的配置 1、用的是docker环境,还有一层代理,代理用的镜像是:jwilder/nginx-proxy 2、docker里是有php和nginx 确认配置 docker里的php和ngi…...

如何一目了然地监控远程 Linux 系统
动动发财的小手,点个赞吧! Glances 是一款免费的开源、现代、跨平台、实时 top 和类似 htop 的系统监控工具,与同类工具相比,它提供了先进的功能,并且可以在不同的模式下运行:作为独立模式、客户端/服务器模…...

9.环境对象和回调函数
9.1环境对象 指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境 作用: 弄清楚this的指向,可以让我们代码更简洁 ➢函数的调用方式不同,this指代的对象也不同 ➢[谁调用,this 就指代谁] 是判断this指向的…...
51单片机(普中HC6800-EM3 V3.0)实验例程软件分析概览
本专栏将分析普中HC6800-EM3 V3.0 (9.22)\5--实验程序\基础实验例程中的各个例程的代码。 引言:本专栏将对历程中的关键代码进行分析与拓展,再学习一遍51,记录与各位一起进步。 下面是文件列表: E:\USER\000study\000_51单片机\000普中HC6800-EM3 V3.0 (9.22)\5--实…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...