架构师训练营 - 第十一周作业
发布于: 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 加入
还未添加个人简介











评论