Java 标准库实现常见加密解密
一时兴起,好奇 Java 中常用的加解密是如何实现的,今天就 常见的 bas64编码解码、MD5、SHA256、HmacSHA256 做个简单小结,希望对各位有用。
环境:
- JDK: 17
以下内容基于 JDK 17 的自带工具库 实现,示例如下:
package com.example.util; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; public class MyCrypto { // base64 encode and decode public static String encodeBase64(String val) { return Base64.getEncoder().encodeToString(val.getBytes()); } public static String decodeBase64(String b64Str) { return new String(Base64.getDecoder().decode(b64Str)); } // md5 or sha256 encrypt public static String md5OrSha256(String val, String algorithm) { if (val == null) { val = ""; } String Str = ""; try { MessageDigest md = MessageDigest.getInstance(algorithm); md.update(val.getBytes()); byte[] b = md.digest(); int i; StringBuilder builder = new StringBuilder(32); for (int j = 0; j < b.length; j++) { i = b[j]; if (i < 0) { i += 256; } if (i < 16) { builder.append("0"); } builder.append(Integer.toHexString(i)); } Str = builder.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // md5 -> 128 bits, sha256 -> 256 bits return Str; } private static String byteArrayToHexString(byte[] b) { StringBuilder builder = new StringBuilder(); String stmp; for (int i = 0; i < b.length; i++) { stmp = Integer.toHexString(b[i] & 0XFF); if (stmp.length() == 1) builder.append('0'); builder.append(stmp); } return builder.toString().toLowerCase(); } public static String hmacSha256(String msg, String secret) { String hash = ""; String algorithm = "HmacSHA256"; try { Mac instance = Mac.getInstance(algorithm); SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), algorithm); instance.init(secretKey); byte[] bytes = instance.doFinal(msg.getBytes()); hash = byteArrayToHexString(bytes); } catch (NoSuchAlgorithmException| InvalidKeyException e) { e.printStackTrace(); } return hash; } public static void main(String[] args) { String str = "hello, world"; System.out.println(encodeBase64(str)); System.out.println(decodeBase64(encodeBase64(str))); System.out.println(md5OrSha256(str, "MD5")); System.out.println(md5OrSha256(str, "SHA-256")); System.out.println(hmacSha256("hello, world", "secret")); } }
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-12-07 gin框架项目实战系列汇总
2022-12-07 gin源码学习-项目启动(1)
2021-12-07 十大排序算法的实现-python&golang