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"));
}
}

posted on   进击的davis  阅读(138)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示