写点什么

作业 -11- 安全、高可用

用户头像
梦子说
关注
发布于: 2020 年 08 月 26 日

请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

package com.youzhicai.yingshang.business.controller;
import java.security.MessageDigest;
import java.util.UUID;
/**
* @Description 密码工具
*/
public class PasswordUtil {
public static Boolean checkPW(String account, String plainPW, String cipherPW) {
//通过account获取数据库存储的salt
String salt = "";
return md5(plainPW, salt).equals(cipherPW);
}
//传一个字符串过来经过md5处理返回一个字符串
public static String md5(String s, String salt) {
try {
s += salt;
//MessageDigest是封装md5算法的工具对象还支持SHA算法
MessageDigest md = MessageDigest.getInstance("MD5");
//通过digest拿到的任意字符串,得到的bates都是等长的
byte[] bytes = md.digest(s.getBytes("utf-8"));
//返回的toHex通过下面方法再处理
return toHex(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String toHex(byte[] bytes) {
//把toHex的字符串把二进制转换成十六进制
final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
StringBuilder ret = new StringBuilder(bytes.length * 2);
//循环判断是为了补位操作
for (int i = 0; i < bytes.length; i++) {
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}
public static String salt() {
//使用UUID通用唯一识别码,取第一个-前面的值
UUID uuid = UUID.randomUUID();
String[] arr = uuid.toString().split("-");
return arr[0];
}
}



用户头像

梦子说

关注

还未添加个人签名 2018.12.01 加入

还未添加个人简介

评论

发布
暂无评论
作业-11-安全、高可用