架构师训练营 - 第十一周作业
发布于: 2021 年 01 月 04 日
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
代码实现
public class CryptoUtil {
private static final String SECRET_KEY = "geekbang";
private static final String ALGORITHM_MAC = "HmacMD5";
public static boolean checkPW(String userId, String password, String cryptoPassword) {
String data = new StringBuilder(userId).append(password).toString();
try {
String encryptPassword = encryptHMAC(data, SECRET_KEY);
return cryptoPassword.equals(encryptPassword);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static String encryptHMAC(String source, String authKey) throws Exception {
byte[] dataBytes = source.getBytes("UTF-8");
SecretKey secretKey = new SecretKeySpec(authKey.getBytes("UTF-8"), ALGORITHM_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
byte[] cryptoBytes = mac.doFinal(dataBytes);
return getHexStr(cryptoBytes);
}
public static String getHexStr(byte[] b) {
String tempstr = "", str = "";
for (int i = 0; i < b.length; i++) {
tempstr = Integer.toHexString(b[i] & 0xFF);
if (tempstr.length() == 1) {
str += "0" + tempstr;
} else {
str += tempstr;
}
if ((i + 1) % 16 == 0) {
str += "/n";
}
}
return str;
}
public static void main(String[] args) throws Exception {
String data = new StringBuilder("604678935").append("123456789").toString();
System.out.println(encryptHMAC(data, SECRET_KEY));
System.out.println(checkPW("604678935", "123456789", "d80fcc928db28e7a1481693ddbf44163/n"));
}
}
复制代码
划线
评论
复制
发布于: 2021 年 01 月 04 日阅读数: 19
版权声明: 本文为 InfoQ 作者【chenlovehx】的原创文章。
原文链接:【http://xie.infoq.cn/article/f39ee7e0cece5bfc36cd3fa99】。文章转载请联系作者。
chenlovehx
关注
还未添加个人签名 2018.04.26 加入
还未添加个人简介
评论