如何用三维数组实现键盘弱密码的校验
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇文章为大家展示了如何用三维数组实现键盘弱密码的校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一个键盘弱密码简单校验实现,其中连续3个字符校验的逻辑是先
千家信息网最后更新 2025年02月02日如何用三维数组实现键盘弱密码的校验
本篇文章为大家展示了如何用三维数组实现键盘弱密码的校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
一个键盘弱密码简单校验实现,其中连续3个字符校验的逻辑是先获取当前字符定位下标,通过下标+-1获取下一个字符和下下个字符与字符串接下来的两个字符做比较。
package com.linya.common.util;
import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set;
import cn.hutool.core.util.ChatUtil;
/**
@author 临涯掠川
@Description 键盘密码复杂度校验工具
@create 2021-03-16 15:21 */
public class TextValidUtil {
private static char[][][] KEYBOARD = new char[5][15][2];static { KEYBOARD[0][0][0] = '`';KEYBOARD[0][0][1] = '~';KEYBOARD[1][1][0] = 'q';KEYBOARD[1][1][1] = 'Q'; KEYBOARD[0][1][0] = '1';KEYBOARD[0][1][1] = '!';KEYBOARD[1][2][0] = 'w';KEYBOARD[1][2][1] = 'W'; KEYBOARD[0][2][0] = '2';KEYBOARD[0][2][1] = '@';KEYBOARD[1][3][0] = 'e';KEYBOARD[1][3][1] = 'E'; KEYBOARD[0][3][0] = '3';KEYBOARD[0][3][1] = '#';KEYBOARD[1][4][0] = 'r';KEYBOARD[1][4][1] = 'R'; KEYBOARD[0][4][0] = '4';KEYBOARD[0][4][1] = '$';KEYBOARD[1][5][0] = 't';KEYBOARD[1][5][1] = 'T'; KEYBOARD[0][5][0] = '5';KEYBOARD[0][5][1] = '%';KEYBOARD[1][6][0] = 'y';KEYBOARD[1][6][1] = 'Y'; KEYBOARD[0][6][0] = '6';KEYBOARD[0][6][1] = '^';KEYBOARD[1][7][0] = 'u';KEYBOARD[1][7][1] = 'U'; KEYBOARD[0][7][0] = '7';KEYBOARD[0][7][1] = '&';KEYBOARD[1][8][0] = 'i';KEYBOARD[1][8][1] = 'I'; KEYBOARD[0][8][0] = '8';KEYBOARD[0][8][1] = '*';KEYBOARD[1][9][0] = 'o';KEYBOARD[1][9][1] = 'O'; KEYBOARD[0][9][0] = '9';KEYBOARD[0][9][1] = '(';KEYBOARD[1][10][0] = 'p';KEYBOARD[1][10][1] = 'P'; KEYBOARD[0][10][0] = '0';KEYBOARD[0][10][1] = ')';KEYBOARD[1][11][0] = '[';KEYBOARD[1][11][1] = '{'; KEYBOARD[0][11][0] = '-';KEYBOARD[0][11][1] = '_';KEYBOARD[1][12][0] = ']';KEYBOARD[1][12][1] = '}'; KEYBOARD[0][12][0] = '=';KEYBOARD[0][12][1] = '+';KEYBOARD[1][13][0] = '\\';KEYBOARD[1][13][1] = '|'; KEYBOARD[2][1][0] = 'a';KEYBOARD[2][1][1] = 'A';KEYBOARD[3][1][0] = 'z';KEYBOARD[3][1][1] = 'Z'; KEYBOARD[2][2][0] = 's';KEYBOARD[2][2][1] = 'S';KEYBOARD[3][2][0] = 'x';KEYBOARD[3][2][1] = 'X'; KEYBOARD[2][3][0] = 'd';KEYBOARD[2][3][1] = 'D';KEYBOARD[3][3][0] = 'c';KEYBOARD[3][3][1] = 'C'; KEYBOARD[2][4][0] = 'f';KEYBOARD[2][4][1] = 'F';KEYBOARD[3][4][0] = 'v';KEYBOARD[3][4][1] = 'V'; KEYBOARD[2][5][0] = 'g';KEYBOARD[2][5][1] = 'G';KEYBOARD[3][5][0] = 'b';KEYBOARD[3][5][1] = 'B'; KEYBOARD[2][6][0] = 'h';KEYBOARD[2][6][1] = 'H';KEYBOARD[3][6][0] = 'n';KEYBOARD[3][6][1] = 'N'; KEYBOARD[2][7][0] = 'j';KEYBOARD[2][7][1] = 'J';KEYBOARD[3][7][0] = 'm';KEYBOARD[3][7][1] = 'M'; KEYBOARD[2][8][0] = 'k';KEYBOARD[2][8][1] = 'K';KEYBOARD[3][8][0] = ',';KEYBOARD[3][8][1] = '<'; KEYBOARD[2][9][0] = 'l';KEYBOARD[2][9][1] = 'L';KEYBOARD[3][9][0] = '.';KEYBOARD[3][9][1] = '>'; KEYBOARD[2][10][0] = ';';KEYBOARD[2][10][1] = ':';KEYBOARD[3][10][0] = '/';KEYBOARD[3][10][1] = '?'; KEYBOARD[2][11][0] = '\'';KEYBOARD[2][11][1] = '"'; KEYBOARD[4][14][0] = ' ';}private static ListEXCLUDED_WORD = Arrays.asList("admin", "root");private final static int MIN_SIZE = 8;private final static int MAX_SIZE = 32;/** * [@param](https://my.oschina.net/u/2303379) account * [@param](https://my.oschina.net/u/2303379) passWord * @return * @Description 弱口令校验 * @rule * a. 最小8位,最大32位 * b. 大写、小写、数字、特殊字符,至少包含三种 * c. 不允许出现3位以上相同的字符和不允许出现键盘相邻的同方向3位以上连续字符 * d. 不允许密码包含账号全称 * e. 不允许出现常见单词,如admin、root等 */
public static boolean isWeakPassWord(String account, String passWord) {
// 长度校验 if (passWord.length() < 8 || passWord.length() > 32) return true; // 常见单词校验 if (EXCLUDED_WORD.contains(passWord)) return true; // 名称校验 if (account != null && passWord.contains(account)) return true; // 3个字符和字符种类校验 if (isThirdCharsRule(passWord)) return true; return false;}/** * @param characters * @return * @rule * 1.字符种类不少于3类 * 2.连续3个字符检查 * 3.键盘临近3个字符检查 */private static boolean isThirdCharsRule(String characters) { char[] chars = characters.toCharArray(); Settype = new HashSet<>(); for (int i = chars.length - 1; i >= 2; i--) { if (chars[i] == chars[i - 1] && chars[i - 1] == chars[i - 2]) return true; int[] firstIndex = getIndex(chars[i]); if (isThirdCharByIndex(firstIndex, chars[i - 1], chars[i - 2])) return true; saveCharType(chars[i], type); } saveCharType(chars[0], type); saveCharType(chars[1], type); if (type.size() < 3) return true; return false;}private static int[] getIndex(char cha) { int[] index = new int[3]; for (int i = 0; i < KEYBOARD.length; i++) { for (int j = 0; j < KEYBOARD[i].length; j++) { for (int k = 0; k < KEYBOARD[i][j].length; k++) { if (KEYBOARD[i][j][k] == cha) { index[0] = i; index[1] = j; index[2] = k; return index; } } } } throw new RuntimeException("exist unrecognized character:" + cha);}private static boolean isThirdCharByIndex(int[] index, char secondChar, char thirdChar) { if (orientedCheck(index, index[0], 1, 0, 0, KEYBOARD.length, secondChar, thirdChar)) return true; if (orientedCheck(index, index[1], 0, 1, 0, KEYBOARD[0].length, secondChar, thirdChar)) return true; if (orientedCheck(index, index[2], 0, 0, 1, KEYBOARD[0][0].length, secondChar, thirdChar)) return true; return false;}private static boolean orientedCheck(int[] index, int validIndex, int first, int second, int third, int size, char secondChar, char thirdChar) { if (validIndex + 2 < size) if (nearCharCompare(index, first, second, third, secondChar, thirdChar)) return true; if (validIndex - 1 > 0) if (nearCharCompare(index, -first, -second, -third, secondChar, thirdChar)) return true; return false;}private static boolean nearCharCompare(int[] index, int first, int second, int third, char secondChar, char thirdChar) { if (KEYBOARD[index[0] + first][index[1] + second][index[2] + third] == secondChar && KEYBOARD[index[0] + first * 2][index[1] + second * 2][index[2] + third * 2] == thirdChar) return true; return false;}private static void saveCharType(char cha, Set type){ if (CharUtil.isLetterLower(cha)) type.add(1); else if (CharUtil.isLetterUpper(cha)) type.add(2); else if (CharUtil.isNumber(cha)) type.add(3); else type.add(4);}public static void main(String[] args) { String account = "admin"; String passWord = "1qrfw3j6tesedex@0!?| 上述内容就是如何用三维数组实现键盘弱密码的校验,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
字符
键盘
密码
数组
三维
下标
内容
单词
常见
技能
知识
种类
检查
复杂
最小
特殊
相同
简明
接下来
简明扼要
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库导入导出速度对比
如何避免java循环数据库
cs服务器更换地图
贵州高速公路网络安全
我的世界服务器掉线
丽江深圳网络安全培训哪家好
四川税务网络技术体系
网络安全好就业吗
美团外卖数据库保存多久客户订单
新建的数据库分离后在哪里
游戏服务器维护
免费打电话软件开发
深圳云岭网络技术有限公司
湖南省学it软件开发培训机构
畅邮服务器
陇南市网络安全宣传周启动
nfs服务器安全
小成本创业 软件开发
简单数据库应用程序
美格网络技术有限公司招聘
网络安全教育软件的开发
网络安全上机试题
中国网络安全事件2021
免解压数据库安装
数据库接收硬件数据
电信卡网络连接不到服务器
网络远程管理服务器软件
数据库防火墙有纯软件形式吗
我的世界服务器怎样快速获得钻石
株洲市区划地名 数据库 招标