当前位置: 首页 > news >正文

文本加密工具类-支持MD5、SHA1、SHA256、SHA224、SHA512、SHA384、SHA3、RIPMD160算法

文本加密工具类

    • 1.算法简介
      • 1.1 MD5
      • 1.2 SHA-1
      • 1.3 SHA-2(推荐使用)
      • 1.4 SHA-3(推荐使用)
      • 1.5 RIPEMD-160
    • 2.工具类案例
      • 2.1POM导入
      • 2.2代码编写
      • 2.3 输出示例

1.算法简介

1.1 MD5

MD5 (Message-Digest Algorithm 5)

  • 描述:MD5 是一种广泛使用的哈希算法,它生成一个 128 位(16 字节)的散列值。
  • 用途:最初用于数据完整性检查、密码散列等。
  • 安全性:由于已知的安全漏洞,MD5 不再推荐用于安全性要求高的场景,例如密码存储。但仍然用于某些非安全相关的情景,如数据校验。

1.2 SHA-1

SHA-1 (Secure Hash Algorithm 1)

  • 描述:SHA-1 生成一个 160 位(20 字节)的散列值。
  • 用途:广泛应用于数字签名标准(Digital Signature Standard, DSS)以及其他需要数据完整性的场合。
  • 安全性:由于存在碰撞攻击的风险,SHA-1 已不再被认为是安全的,特别是在密码学安全方面。

1.3 SHA-2(推荐使用)

SHA-2 (Secure Hash Algorithm 2)

  • 描述:SHA-2 是一组散列函数,包括 SHA-224、SHA-256、SHA-384 和 SHA-512,分别生成 224、256、384 和 512 位的散列值。
  • 用途:用于密码存储、数字签名、安全协议等。
  • 安全性:SHA-2 被认为是目前比较安全的散列算法之一,尤其是 SHA-256 和 SHA-512,在大多数安全应用中被广泛推荐使用。

1.4 SHA-3(推荐使用)

SHA-3 (Keccak)

  • 描述:SHA-3 是 NIST 于 2012 年公布的一种新的哈希函数标准,基于 Keccak 算法,提供了多种输出长度(224、256、384 和 512 位)。
  • 用途:SHA-3 被设计用于替代 SHA-2,提供更高的安全性保证。
  • 安全性:SHA-3 被认为是非常安全的,适用于各种密码学安全场景。

1.5 RIPEMD-160

RIPEMD-160 (RACE Integrity Primitives Evaluation Message Digest)

  • 描述:RIPEMD-160 生成一个 160 位(20 字节)的散列值。
  • 用途:常用于比特币等加密货币中,用于地址生成。
  • 安全性:虽然 RIPEMD-160 在加密货币领域被广泛应用,但在其他领域,特别是需要高度安全性的场合,它的使用较少

2.工具类案例

2.1POM导入

	<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.70</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>33.2.1-jre</version></dependency>

2.2代码编写

package cn.zhangsan.tools.enums;/*** @ClassName Algorithm* @Description TODO* @Author ZhangSan_Plus* @Date 2024/7/29 20:45* @Version 1.0**/
public enum Algorithm {MD5, SHA1, SHA256, SHA512, RIPEMD160, SHA224, SHA384, SHA3;
}package cn.zhangsan.tools.utils;import cn.zhangsan.tools.enums.Algorithm;
import com.google.common.collect.Maps;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.util.Base64;
import java.util.Map;/*** @ClassName HashGeneratorUtils* @Description TODO* @Author ZhangSan_Plus* @Date 2024/7/29 20:04* @Version 1.0**/
public class HashGeneratorUtils {static Map<Object, String> map = Maps.newLinkedHashMap();static {Security.addProvider(new BouncyCastleProvider());}public static void main(String[] args) {String input = "张三";try {Map<Object, String> hashText = getHashText(input, 4);hashText.forEach((k, v) -> System.out.println(k + ":" + v));} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}public static String extractDomain(String urlString) {try {URL url = new URL(urlString);return url.getHost();} catch (MalformedURLException e) {e.printStackTrace();return null;}}private static Map<Object, String> getHashText(String text, int digest) throws NoSuchAlgorithmException {map.put(Algorithm.MD5, encryption(md5(text), digest));map.put(Algorithm.SHA1, encryption(sha1(text), digest));map.put(Algorithm.SHA256, encryption(sha224(text), digest));map.put(Algorithm.SHA224, encryption(sha256(text), digest));map.put(Algorithm.SHA512, encryption(sha384(text), digest));map.put(Algorithm.SHA384, encryption(sha512(text), digest));map.put(Algorithm.SHA3, encryption(sha3_256(text), digest));map.put(Algorithm.RIPEMD160, encryption(ripemd160(text), digest));return map;}private static byte[] md5(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("MD5");return digest.digest(input.getBytes());}private static byte[] sha1(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-1");return digest.digest(input.getBytes());}private static byte[] sha224(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-224");return digest.digest(input.getBytes());}private static byte[] sha256(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-256");return digest.digest(input.getBytes());}private static byte[] sha384(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-384");return digest.digest(input.getBytes());}private static byte[] sha512(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-512");return digest.digest(input.getBytes());}private static byte[] sha3_256(String input) throws NoSuchAlgorithmException {MessageDigest digest = null;try {digest = MessageDigest.getInstance("SHA3-256", "BC");} catch (NoSuchProviderException e) {throw new RuntimeException(e);}return digest.digest(input.getBytes());}private static byte[] ripemd160(String input) throws NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("RIPEMD160");return digest.digest(input.getBytes());}private static String toHexString(byte[] bytes) {return Hex.toHexString(bytes);}private static String toBase64(byte[] bytes) {return Base64.getEncoder().encodeToString(bytes);}private static String toBase64Url(byte[] bytes) {return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);}private static String toBinary(byte[] bytes) {StringBuilder binaryString = new StringBuilder();for (byte b : bytes) {for (int i = 7; i >= 0; i--) {binaryString.append(((b >> i) & 1) == 1 ? '1' : '0');}binaryString.append("");}return binaryString.toString().trim();}private static String encryption(byte[] bytes, int encoding) {switch (encoding) {case 1:return toHexString(bytes);case 2:return toBinary(bytes);case 3:return toBase64(bytes);case 4:return toBase64Url(bytes);default:return "";}}
}

2.3 输出示例

在这里插入图片描述

http://www.lryc.cn/news/417515.html

相关文章:

  • LVS集群中的负载均衡技术
  • Java网络编程——HTTP协议原理
  • java之多线程篇
  • 【深度学习】TTS,CosyVoice,训练脚本解析
  • 《Unity3D网络游戏实战》学习与实践
  • Machine_Matrix打靶渗透【附代码】(权限提升)
  • 代码随想录算法训练营Day22 | Leetcode 77 组合 Leetcode 216 组合总和Ⅲ Leetcode17 电话号码的字母组合
  • 【微信小程序实战教程】之微信小程序中的 JavaScript
  • K-近邻算法(一)
  • 从零开始之AI视频制作篇
  • Java之TCP编程综合案例
  • 【数据分析---Pandas实战指南:精通数据查询、增删改操作与高效索引和列名操作管理】
  • Spring Cloud全解析:注册中心之Eureka服务获取和服务续约
  • 三相整流电路交流侧谐波仿真分析及计算
  • 了解Java中的反射,带你如何使用反射
  • 【c++】基础知识——快速入门c++
  • AI学习记录 - 自注意力机制的计算流程图
  • JavaScript快速入门,满满干货总结,快速掌握JS语法,DOM,BOM,事件
  • 【C++】C++入门基础【类与对象】
  • Qt | QScatterSeries 散点图
  • 无缝协作的艺术:Codigger 视频会议(Meeting)的用户体验
  • C基础练习(学生管理系统)
  • 网络安全抓包封包WEB
  • Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)
  • 普中51单片机:DS18B20温度传感器操作指南(十三)
  • 【网络】网络的发展历程及其相关概念
  • 鸿蒙HarmonyOS开发:如何使用第三方库,加速应用开发
  • C++的标准模板库简单介绍
  • 安卓常用控件ListView
  • 优秀的行为验证码的应用场景与行业案例