MD5的加密
import java.security.MessageDigest;
public class MD5 {
public static void main(String[] args) {
String pwd = getMD5("99991");
System.out.println(pwd);
}
//生成MD5
public static String getMD5(String message) {
String md5 = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5"); // 创建一个md5算法对象
byte[] messageByte = message.getBytes("UTF-8");
byte[] md5Byte = md.digest(messageByte); // 获得MD5字节数组,16*8=128位
md5 = bytesToHex(md5Byte); // 转换为16进制字符串
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}
// 二进制转十六进制
public static String bytesToHex(byte[] bytes) {
StringBuffer hexStr = new StringBuffer();
int num;
for (int i = 0; i < bytes.length; i++) {
num = bytes[i];
if(num < 0) {
num += 256;
}
if(num < 16){
hexStr.append("0");
}
hexStr.append(Integer.toHexString(num));
}
return hexStr.toString().toUpperCase();
}
}
MD5的加密方法:弊端,同一个密码的加密后结果是一样的,可以通过枚举测试等方法进行破解
String password = MD5.getMD5(user.getPassword());
user.setPassword(password);
Spring-Security的内置加密-----BCryptPasswordEncoder
passwordEncoder.encode(user.getPassword())
密码转换结果
123123----$2a$10$3npZGln1MQZEAGK0pvVWTeZ3q.jb3JX.arG.F.PE4hNpdnPDaB8ci
–
使用security的passwordEncoding方式登录
***配置加密类必须在设置加密登录之后进行配置***
<security:authentication-manager>
<!--指定用户和密码的提供者-->
<security:authentication-provider user-service-ref="userService">
<!--不设置加密密码
<security:authentication-provider>
<security:user-service>
<!–
在内存中配置链式的账号密码
{noop}不使用加密
authorities:角色,认证的角色必须是一个用户
–>
<security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
</security:user-service>
</security:authentication-provider>-->
<!--配置使用加密方式启动-->
<security:password-encoder ref="passwordEncoding" />
</security:authentication-provider>
</security:authentication-manager>
<!--配置加密类-->
<bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>