Java MD5加密
2023-09-11 14:14:35 时间
MD5加密很常用,比如数据库中密码等敏感字段需要加密存储,核对密码时先以同样的方式对用户输入的密码进行加密,再与数据库中存储的密码比较。
MD5加密有很多种实现方式,此处介绍2种。
1、使用JDK自带MessageDigest
public class MD5Util { public static String getMD5Str(String str) { byte[] digest = null; try { MessageDigest md5 = MessageDigest.getInstance("md5"); digest = md5.digest(str.getBytes("utf-8")); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //16是表示转换为16进制数 String md5Str = new BigInteger(1, digest).toString(16); return md5Str; } }
2、使用Spring自带的DigestUtils
上面是自己封装,太麻烦,Spring已经给我们封装好了。
String md5Str = DigestUtils.md5DigestAsHex("原串".getBytes());
说明
只使用md5加密是不行的,很容易被破解。常见的做法有:
- 先对原串进行一些处理,比如先给它拼接一个字符串常量,再进行md5加密。即使对方解密,也获取不到原串。
- 使用多种加密算法。比如先用md5加密,再对加密的结果使用其它加密算法进行加密。比如先使用md5加密,对加密的结果再次使用md5加密。
这2种方式方式经常一起使用。
第一种确实有问题,我测试了几百万个数据,不符合的数据加密后长度集中在29、30、31,
这几百万个数据中没有出现大于32的,数据库字段长度设置为32字符,能存储得下,依然可以使用,只不过数据长度不一定是32位。
第二种加密后是32位的,无论是性能、可靠性、编码量都比其它方式优异,推荐
相关文章
- Java类加载器( 死磕 1-2)
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
- java - 详解 Java 17 中新推出的密封类
- 【JAVA】Eclipse中开启java和xml智能提示功能(图文,已解决!)
- java aes_cbc_256 加密解密
- 哈希加密详解和md5、sha1、sha256、Java 工具类
- java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱
- 【Java】java: 无法访问org.testng.annotations.Test
- Java当中的类集框架
- Java中如何解析SQL语句、格式化SQL语句、生成SQL语句?
- 《Java 2D游戏编程入门》—— 8.3 创建一个原型编辑器
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
- java 文件拷贝
- 诊断Java代码中常见的数据库性能热点问题应该这么做!
- java工具类学习,系统中用户密码加密总结
- Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较(报错operator > cannot be applied to java.math.BigDecimal,int)
- Java集合篇:HashSet
- java选择控制语句和循环控制语句和C语言的有什么区别?
- java MD5 加密代码的实现
- JAVA RSA加密AES加密
- Java中java.util.Arrays参考指南
- Java 创建 List 和 Map 同时赋初值的 5 种方式