架构师训练营 第十一周 课后练习
发布于: 2020 年 08 月 26 日
作业
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户ID,String 密码明文,String 密码密文) 返回密码是否正确boolean值,密码加密算法使用你认为合适的加密算法。
代码结构
代码结构
源代码
package com.xianyanyang.secret.service;/** * 密码服务接口 public interface SecretService { /** * 校验密码 * * @param salt 加密盐 * @param plaintext 明文 * @param ciphertext 密文 * @return 校验结果 */ boolean checkPW(String salt, String plaintext, String ciphertext);}
package com.xianyanyang.secret.service.impl;import com.xianyanyang.secret.service.EncryptAlgorithm;import com.xianyanyang.secret.service.SecretService;import org.apache.commons.lang3.StringUtils;import org.apache.commons.lang3.Validate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/** * 密码服务 */@Servicepublic class SecretServiceImpl implements SecretService { private EncryptAlgorithm encryptAlgorithm; @Autowired public void setEncryptAlgorithm(EncryptAlgorithm encryptAlgorithm) { this.encryptAlgorithm = encryptAlgorithm; } /** * 校验密码 * * @param salt 加密盐 * @param plainText 明文 * @param ciphertext 密文 * @return 校验结果 */ @Override public boolean checkPW(String salt, String plainText, String ciphertext) { Validate.notBlank(salt, "加密盐不能为空"); Validate.notBlank(plainText, "明文不能为空"); Validate.notBlank(ciphertext, "密文不能为空"); String encryptText = this.encryptAlgorithm.encrypt(plainText, salt); return StringUtils.equals(encryptText, plainText); }}
package com.xianyanyang.secret.service;/** * 加密算法 */public interface EncryptAlgorithm { /** * 加密。 * * @param plainText 明文 * @param salt 加密盐 * @return Base64密文 */ String encrypt(String plainText, String salt);}
package com.xianyanyang.secret.service.impl;import com.xianyanyang.secret.service.EncryptAlgorithm;import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.digest.DigestUtils;import org.springframework.stereotype.Service;/** * 基于RSA256的加密算法实现 */@Servicepublic class RSA256EncryptAlgorithm implements EncryptAlgorithm { /** * 加密。 * * @param plainText 明文 * @param salt 加密盐 * @return Base64密文 */ @Override public String encrypt(String plainText, String salt) { byte[] bytes = DigestUtils.sha256(plainText + salt); return Base64.encodeBase64String(bytes); }}
划线
评论
复制
发布于: 2020 年 08 月 26 日阅读数: 51
版权声明: 本文为 InfoQ 作者【且听且吟】的原创文章。
原文链接:【http://xie.infoq.cn/article/df0c6a3fd5c4583d23c086617】。未经作者许可,禁止转载。
且听且吟
关注
没有绝世高手 2018.06.30 加入
还未添加个人简介
评论