java – 如何对安全密码执行验证. char []上的正则表达式?
这个问题是对这个问题的跟进:
Why is char[] preferred over String for passwords? 这个问题非常适合理解为什么使用char []而不是String;但是,它没有解释如何以安全的方式对char []执行密码验证.这就是我想知道的. 简而言之,我需要检查密码是否符合以下要求: >至少包含一个大写字母 现在我明白了如何使用正则表达式来执行验证……这些答案显示了如何做到这一点: > Regexp Java for password validation 据我所知,正则表达式检查涉及使用字符串.使用它们似乎不安全,因为字符串是不可变的,因此在使用它们后不能立即清除它们.另一方面,char []可以被清除. 那么,如何对存储在char []中的密码执行验证,而不是字符串? 我可以遍历每个角色,但是我必须创建我想要测试的每个集合.理想情况下,能够利用正则表达式会很有用. 在Java中,我可以通过以下方法进行正则表达式检查. String.matches(String regex) 要么 Pattern pattern = Pattern.compile(String regex); pattern.matcher(CharSequence testString).matches(); 如您所见,这两种方法都不支持直接使用char []. 解决方法
我会尽量避免复杂的正则表达式,我会建议像 –
boolean validatePassword(char[] password,int n,int m) { if (password == null || password.length < n || password.length > m) { return false; } boolean upper = false; boolean lower = false; boolean digit = false; boolean symbol = false; for (char ch : password) { if (Character.isUpperCase(ch)) { upper = true; } else if (Character.isLowerCase(ch)) { lower = true; } else if (Character.isDigit(ch)) { digit = true; } else { // or some symbol test. symbol = true; } // This short-circuits the rest of the loop when all criteria are true. if (upper && lower && digit && symbol) { return true; } } return upper && lower && digit && symbol; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |