加解密---消息摘要算法(未完待续)
1、概述
消息摘要算法特征:加密过程不需要秘钥、加密后的数据无法被解密
2、消息摘要算法
1.1 MD(Message Digest)
MD家族(128位摘要信息)
package com.exiuge.mytest; import org.apache.commons.codec.binary.Hex; import java.security.MessageDigest; public class JdkMD5 { private static String src="hello,rose"; public static void main(String[] args){ enDeCode(src); } public static void enDeCode(String src){ try { MessageDigest messageDigest=MessageDigest.getInstance("MD5"); byte[] desBytes=messageDigest.digest(src.getBytes()); System.out.println(Hex.encodeHexString(desBytes)); }catch (Exception e){ e.printStackTrace(); } } }
package com.exiuge.mytest;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD4Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
import java.security.MessageDigest;
import java.security.Security;
public class BouncyCastleMD4 {
private static String src="hello,rose";
public static void main(String[] args){
enDeCode(src);
}
public static void enDeCode(String src){
try {
//第一种方式
Digest digest =new MD4Digest();
digest.update(src.getBytes(),0,src.getBytes().length);
byte[] md4Bytes=new byte[digest.getDigestSize()];
digest.doFinal(md4Bytes,0);
System.out.println(Hex.toHexString(md4Bytes));
//第二种方式
Security.addProvider(new BouncyCastleProvider());
MessageDigest messageDigest=MessageDigest.getInstance("MD4");
byte[] md44Bytes=messageDigest.digest(src.getBytes());
System.out.println(Hex.toHexString(md44Bytes));
}catch (Exception e){
e.printStackTrace();
}
}
}
package com.exiuge.mytest; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.MD5Digest; import org.bouncycastle.util.encoders.Hex; public class BouncyCastleMD5 { private static String src="hello,rose"; public static void main(String[] args){ enDeCode(src); } public static void enDeCode(String src){ try { Digest digest =new MD5Digest(); digest.update(src.getBytes(),0,src.getBytes().length); byte[] md5Bytes=new byte[digest.getDigestSize()]; digest.doFinal(md5Bytes,0); System.out.println(Hex.toHexString(md5Bytes)); }catch (Exception e){ e.printStackTrace(); } } }
package com.exiuge.mytest; import org.apache.commons.codec.digest.DigestUtils; public class CommonsCodecMD5 { private static String src="hello,rose"; public static void main(String[] args){ enDeCode(src); } public static void enDeCode(String src){ System.out.println(DigestUtils.md5Hex(src.getBytes())); } }
MD应用场景:
注册
登录
1.2 SHA(Secure Hash Algorithm)
SHA1、SHA2(SHA224、SHA256、SHA384、SHA512)
package com.exiuge.mytest; import org.apache.commons.codec.binary.Hex; import java.security.MessageDigest; public class JdkSHA1 { private static String src="hello,rose"; public static void main(String[] args){ enDeCode(src); } public static void enDeCode(String src){ try { MessageDigest messageDigest=MessageDigest.getInstance("SHA"); messageDigest.update(src.getBytes()); System.out.println(Hex.encodeHexString(messageDigest.digest())); }catch (Exception e){ e.printStackTrace(); } } }
package com.exiuge.mytest; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.SHA1Digest; import org.bouncycastle.util.encoders.Hex; public class BouncyCastleSHA1 { private static String src="hello,rose"; public static void main(String[] args){ enDeCode(src); } public static void enDeCode(String src){ try { Digest digest=new SHA1Digest(); digest.update(src.getBytes(),0,src.getBytes().length); byte[] sha1Bytes=new byte[digest.getDigestSize()]; digest.doFinal(sha1Bytes,0); System.out.println(Hex.toHexString(sha1Bytes)); }catch (Exception e){ e.printStackTrace(); } } }
package com.exiuge.mytest; import org.apache.commons.codec.digest.DigestUtils; public class CommonsCastleSHA1 { private static String src="hello,rose"; public static void main(String[] args){ enDeCode(src); } public static void enDeCode(String src){ try { System.out.println(DigestUtils.sha1Hex(src)); }catch (Exception e){ e.printStackTrace(); } } }
SHA应用场景:
1.3 MAC(Message Authentication Code)
融合MD、SHA;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)