我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在黑客面前...为了解决这个弊端,现在大多数都会将信息进行MD5加密.如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...
MD5是常用的加密方法,这里主要讲述JDK中的java.security.MessageDigest加密方式!
1 2 3 4 5 6 7 8 9 10 11 12 | @Test public void testMD() { try { String username = "Vicky" ; MessageDigest messageDigest = MessageDigest.getInstance( "MD5" ); messageDigest.update(username.getBytes()); String usernameMD5 = messageDigest.digest().toString(); System.out.println(usernameMD5); } catch (Exception e) { e.printStackTrace(); } } |
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]
1 2 3 4 5 6 7 8 9 10 11 | @Test public void testMD() { try { String username = "Vicky" ; MessageDigest messageDigest = MessageDigest.getInstance( "MD5" ); messageDigest.update(username.getBytes()); System.out.println(Base64.encode(messageDigest.digest())); } catch (Exception e) { e.printStackTrace(); } } |
打印的是:AgwpBZPO+ErqxOosJp0ybQ==
当然我们可以编写函数,处理二进制转hex字符串.
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * 将16位byte[] 转换为32位String * * @param buffer * @return */ private String toHex( byte buffer[]) { StringBuffer sb = new StringBuffer(buffer.length * 2 ); for ( int i = 0 ; i < buffer.length; i++) { sb.append(Character.forDigit((buffer[i] & 240 ) >> 4 , 16 )); sb.append(Character.forDigit(buffer[i] & 15 , 16 )); } return sb.toString(); } |
编写测试语句
1 2 3 4 5 6 7 8 9 10 11 12 | @Test public void testMD() { try { String username = "Vicky" ; MessageDigest messageDigest = MessageDigest.getInstance( "MD5" ); messageDigest.update(username.getBytes()); System.out.println(toHex(messageDigest.digest())); } catch (Exception e) { e.printStackTrace(); } } |
打印:020c290593cef84aeac4ea2c269d326d,返回的是32位的字符串!!!
这样我们便可以直接使用JDK为我们提供的加密类与函数了!
MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"
创建的方法只为: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?