密码强度和规则

1. 概述

在本快速教程中,我们将了解如何在注册期间实现和显示正确的密码约束。像这样的东西 – 密码应该包含一个特殊字符,或者它应该至少 8 个字符长。

我们希望能够使用强大的密码规则 - 但我们不想手动实际实现这些规则。因此,我们将充分利用成熟的Passay库

2. 自定义密码约束

首先,让我们创建一个自定义约束ValidPassword

@Documented
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target({ TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface ValidPassword {

    String message() default "Invalid Password";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

并在UserDto中使用它:

@ValidPassword
private String password;

3. 自定义密码验证器

现在 - 让我们使用该库创建一些强大的密码规则,而无需实际手动实现其中任何一个。

我们将创建密码验证器PasswordConstraintValidator,我们将定义密码的规则:

public class PasswordConstraintValidator implements ConstraintValidator<ValidPassword, String> {

    @Override
    public void initialize(ValidPassword arg0) {
    }

    @Override
    public boolean isValid(String password, ConstraintValidatorContext context) {
        PasswordValidator validator = new PasswordValidator(Arrays.asList(
           new LengthRule(8, 30), 
           new UppercaseCharacterRule(1), 
           new DigitCharacterRule(1), 
           new SpecialCharacterRule(1), 
           new NumericalSequenceRule(3,false), 
           new AlphabeticalSequenceRule(3,false), 
           new QwertySequenceRule(3,false),
           new WhitespaceRule()));

        RuleResult result = validator.validate(new PasswordData(password));
        if (result.isValid()) {
            return true;
        }
        context.disableDefaultConstraintViolation();
        context.buildConstraintViolationWithTemplate(
          Joiner.on(",").join(validator.getMessages(result)))
          .addConstraintViolation();
        return false;
    }
}

请注意我们如何在此处创建新的约束冲突并禁用默认约束冲突 - 以防密码无效。

最后,让我们也将Passay库添加到我们的 pom 中:

<dependency>
	<groupId>org.passay</groupId>
	<artifactId>passay</artifactId>
	<version>1.0</version>
</dependency>

对于一些历史信息,Passay是古老的vt-passwordJava库的后代。

4.JS密码表

现在服务器端已经完成,让我们看一下客户端并使用JavaScript实现一个简单的密码强度”功能

我们将使用一个简单的jQuery插件 - 用于Twitter Bootstrap的jQuery密码强度计 - 来显示注册中的密码强度.html

<input id="password" name="password" type="password"/>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="pwstrength.js"></script>                  
<script type="text/javascript">
$(document).ready(function () {
    options = {
        common: {minChar:8},
        ui: {
            showVerdictsInsideProgressBar:true,
            showErrors:true,
            errorMessages:{
                wordLength: '<spring:message code="error.wordLength"/>',
                wordNotEmail: '<spring:message code="error.wordNotEmail"/>',
                wordSequences: '<spring:message code="error.wordSequences"/>',
                wordLowercase: '<spring:message code="error.wordLowercase"/>',
                wordUppercase: '<spring:message code="error.wordUppercase"/>',
                wordOneNumber: '<spring:message code="error.wordOneNumber"/>',
                wordOneSpecialChar: '<spring:message code="error.wordOneSpecialChar"/>'
            }
        }
    };
    $('#password').pwstrength(options);
});
</script>

5. 结论

就是这样 - 一种简单但非常有用的方法,可以在客户端显示密码的强度并在服务器端强制执行某些密码规则。

本教程的完整实现可以在github 项目中找到 – 这是一个基于 Eclipse 的项目,因此应该很容易导入和运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
密码强度是指密码的安全程度,即密码对于破解者来说有多难以猜测或者破解。在Python中,可以通过一些方法来评估密码的强度。 一种常见的方法是使用正则表达式来检查密码是否符合一定的规则,例如包含大写字母、小写字母、数字和特殊字符等。可以使用re模块来实现正则表达式的匹配。 另一种方法是计算密码的熵值,即密码中包含的信息量。熵值越高,密码越难以被猜测或者破解。可以使用math模块来计算熵值。 以下是一个简单的示例代码,用于评估密码的强度: ```python import re import math def check_password_strength(password): # 检查密码是否符合规则 if not re.match(r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$", password): return "密码不符合规则" # 计算密码的熵值 entropy = 0 characters = set(password) for char in characters: p = password.count(char) / len(password) entropy -= p * math.log2(p) # 根据熵值评估密码强度 if entropy < 2: return "密码强度较弱" elif entropy < 3: return "密码强度一般" else: return "密码强度较高" # 测试 password = input("请输入密码:") strength = check_password_strength(password) print(strength) ``` 请注意,以上代码只是一个简单的示例,实际上评估密码强度是一个复杂的问题,需要考虑更多的因素。在实际应用中,建议使用成熟的密码强度评估库或者算法来确保密码的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值