登录验证中的密码加密技术(笔记)

1 MD5加密技术
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

1.1 登陆验证
用户前台注册输入用户名信息(包括用户名和密码),controller将用户名和密码封装为User对象传入service进行业务逻辑
这儿的DigestUtil工具类建议使用spring框架中的
 

		//1.获取用户注册的用户信息,封装为User对象,获取该对象的密码
        String password = user.getPassword();
        //2.将String类型的密码转化为byte类型
        byte[] passwordBytes = password.getBytes();
        //3.通过工具类DigestUtils的静态方法md5DigestAsHex对密码进行加密
        String newPassword = DigestUtils.md5DigestAsHex(passwordBytes);
        //4.替换原密码
        user.setPassword(newPassword);
        //简写
        //String password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        //user.setPassword(password);

用户前台登录输入用户名密码,controller将用户名和密码封装为User对象传入service进行业务逻辑

        //md5明文加密
        //1. 获取用户登录时传入的密码
        String password = user.getPassword();
        //2.将改密码转化为byte数组
        byte[] passwordBytes = password.getBytes();
        //3.通过工具类DigestUtils的静态方法md5DigestAsHex对密码进行加密
        String newPassword = DigestUtils.md5DigestAsHex(passwordBytes);
        //4.最后将加密后的新秘密进行后续操作
        user.setPassword(newPassword);
        //或者用下列方式简写
        //String password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        //user.setPassword(password);

2 BCryptPasswordEncoder加密、验证策略

bcrypt是一种跨平台的文件加密工具。Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。你也可以简单理解为它内部自己实现了随机加盐处理。
例如,我们使用MD5加密,每次加密后的密文其实都是一样的,这样就方便了MD5通过大数据的方式进行破解。
Bcrypt生成的密文是60位的。而MD5的是32位的。
使用BCrypt 主要是能实现每次加密的值都是不一样的。
2.1 登录验证

初始化密码加密对象,将返回的对象交给spring容器管理

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

在所需要的业务类中将其注入

	@Autowired
    private BCryptPasswordEncoder passwordEncoder;

使用encode()方法对明文密码进行加密,返回加密后的密文密码

	String encodePassword = passwordEncoder.encode(password);

使用matches()方法将明文密码和密文密码进行匹对,返回boolean类型(true或flase)

boolean result = passwordEncoder.matches(password, encodePassword )

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值