写点什么

架构师训练营 - 第十一周作业

用户头像
chenlovehx
关注
发布于: 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
用户头像

chenlovehx

关注

还未添加个人签名 2018.04.26 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营-第十一周作业