文本加密工具类-支持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 输出示例
相关文章:

文本加密工具类-支持MD5、SHA1、SHA256、SHA224、SHA512、SHA384、SHA3、RIPMD160算法
文本加密工具类 1.算法简介1.1 MD51.2 SHA-11.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) 描述:M…...

LVS集群中的负载均衡技术
目录 一、LVS技术原理 二、NAT模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、软件安装与启用 3、测试 三、DR模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、解决vip响应问题 3、测试 四、ipvsadm命令及参数 1、管理集群服务&#x…...

Java网络编程——HTTP协议原理
协议 我们在网上冲浪时,会在浏览器地址栏输入一个网址,然后就能打开网页了。比如,输入 https://www.douban.com/就可以访问到豆瓣的主页: 那么大家是否好奇:https 是什么意思,作用又是什么呢?…...

java之多线程篇
一、基本概念 1.什么是线程? 线程就是,操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。简单理解就是:应用软件中互相独立,可以同时运行的功能 2.什么是多线程? 有了多线…...
【深度学习】TTS,CosyVoice,训练脚本解析
https://github.com/FunAudioLLM/CosyVoice/blob/main/examples/libritts/cosyvoice/run.sh Bash 脚本是一个语音合成(TTS)训练和推理的完整流水线。让我们逐步解析这个脚本的各个部分。 初始化部分 #!/bin/bash # Copyright 2024 Alibaba Inc. All Rights Reserved. . ./…...

《Unity3D网络游戏实战》学习与实践
纸上得来终觉浅,绝知此事要躬行~ Echo 网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为一个Socket “端口”是英文port的意译,是设备与外界通信交流的出口。每台计算机可以分配0到65535共65536个端口 每一条Sock…...

Machine_Matrix打靶渗透【附代码】(权限提升)
靶机下载地址: https%3A%2F%2Fdownload.vulnhub.com%2Fmatrix%2FMachine_Matrix.zip 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 08:00:27:D9:36:81 1.2. 端口扫描 nmap -p- 192.168.7.155 1.3. 目录扫描 dir…...

代码随想录算法训练营Day22 | Leetcode 77 组合 Leetcode 216 组合总和Ⅲ Leetcode17 电话号码的字母组合
前言 回溯算法中递归的逻辑不重要,只要掌握回溯的模板以及将问题转化为树形图,整个问题就很好解决了,比二叉树简单。 Leetcode 77 组合 题目链接:77. 组合 - 力扣(LeetCode) 代码随想录题解:…...

【微信小程序实战教程】之微信小程序中的 JavaScript
微信小程序中的 JavaScript 微信小程序的业务逻辑都是通过JavaScript语言来实现的,本章我们将详细的讲解JavaScript的基本概念,以及在小程序中如何使用JavaScript语言。JavaScript是一种轻量的、解释型的、面向对象的头等函数语言,是一种动态…...
K-近邻算法(一)
一、 K- 近邻算法 (KNN) 概念 1.1 K- 近邻算法 (KNN) 概念 K Nearest Neighbor 算法⼜叫 KNN 算法,这个算法是机器学习⾥⾯⼀个⽐较经典的算法, 总体来说 KNN 算法是相对⽐ 较容易理解的算法 定义 : 如果⼀个样本在特征空间中的k 个最相似 ( 即特征空间…...

从零开始之AI视频制作篇
从零开始之AI视频制作篇 文章目录 从零开始之AI视频制作篇前言一、工具列表二、成片展示三、制作流程1、获取图片素材2、图片生成视频2.1 Runway操作流程 3、文本生成语音3.1 Fish Audio操作流程 4、视频剪辑4.1 音频素材4.2 字幕生成 四、Runway提示词参考:参考 前…...
Java之TCP编程综合案例
1.反转案例 搭建一个TCP客户端,从键盘录入整行数据(遇到quit结束录入)然后发送给服务器,再接收服务器返回的数据并输出。 package com.briup.chap12;public class Test064_ReversalClient {public static void main(String[] ar…...

【数据分析---Pandas实战指南:精通数据查询、增删改操作与高效索引和列名操作管理】
前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析,本篇文章主要讲述了:数据查询操作,数据增删改操作,索引和列名操作等等。欢迎大家一起探索讨论&#x…...
Spring Cloud全解析:注册中心之Eureka服务获取和服务续约
服务获取和服务续约 eureka客户端通过定时任务的方式进行服务获取和服务续约,在com.netflix.discovery.DiscoveryClient类中,启动了两个定时任务来进行处理 private void initScheduledTasks() {// 是否需要拉取if (clientConfig.shouldFetchRegistry(…...

三相整流电路交流侧谐波仿真分析及计算
一、三相桥式全控整流电路和功率因数测量电路SIMULINK 模型 如图4-1,根据高频焊机的主电路机构和工作原理,可将高频焊机三相整流部分等效为阻感负载的三相桥式全控整流电路模型,其由三相交流电压源、三相晶闸管整流桥、同步六脉冲触发器和阻感…...
了解Java中的反射,带你如何使用反射
反射的定义 反射(Reflection)是Java的一种强大机制,它允许程序在运行时动态地查询和操作类的属性和方法。通过反射,Java程序可以获取类的信息,比如类的名称、方法、字段,以及可以动态地创建对象、调用方法…...

【c++】基础知识——快速入门c++
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C 目录 前言 一、手搓一个Hello World 二、命名空间namespace 1.命名空间的定义 2.命名空间的使用 3.命名空间补充知识 三、c中的输入和输出 四、缺省参…...

AI学习记录 - 自注意力机制的计算流程图
过段时间解释一下,为啥这样子计算,研究这个自注意力花了不少时间,网上很多讲概念,但是没有具体的流程图和计算方式总结…...
JavaScript快速入门,满满干货总结,快速掌握JS语法,DOM,BOM,事件
目录 一. JavaScript、HTML、CSS简介 1.1 HTML简介和举例说明 1.2 CSS简介和举例说明 1.3 JavaScript 简介和举例说明 二. JavaScript 基本语法 2.1 变量类型和定义方式 2.2 逻辑运算符,比较运算符 2.3 流程控制,if,if...else...&…...

【C++】C++入门基础【类与对象】
目录 1.类 1.1类的定义 1.2struct 与 class对比 2.访问限定符 3. 类域 4.实例化 5.存储大小----内存对齐 6.this指针 1.类 1.1类的定义 class作为类的关键字,后面跟的是类的名字,如Stack,{}中的为类的主体,类定义结束时…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...