写点什么

架构师训练营 第十一周 课后练习

用户头像
且听且吟
关注
发布于: 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;
/**
* 密码服务
*/
@Service
public 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的加密算法实现
*/
@Service
public 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
用户头像

且听且吟

关注

没有绝世高手 2018.06.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第十一周 课后练习