首页 > 其他分享 >Md5加密

Md5加密

时间:2024-11-28 09:34:47浏览次数:7  
标签:return 盐值 param 哈希 加密 byte Md5 MD5

/**
 * 功能:可 cache Consumer
 * <p>
 *
 * @author zlc
 * @see Supplier
 * @since 2023-11-14
 */
@FunctionalInterface
public interface CatchableSupplier<T> {
    /**
     * 包装 CatchableSupplier
     * <p>
     * CatchableSupplier => Supplier
     *
     * @param catchableSupplier CatchableSupplier
     * @param <T>               return Type
     * @return Supplier
     */
    static <T> Supplier<T> warp(CatchableSupplier<T> catchableSupplier) {
        return () -> {
            try {
                return catchableSupplier.get();
            } catch (Throwable ex) {
                throw new RuntimeException(ex);
            }
        };
    }

    /**
     * 获取对象
     *
     * @return 返回一个类型为 T 的对象
     * @throws Throwable 当获取对象发生异常时抛出此异常
     */
    T get() throws Throwable;
}

  


public class MD5Util { private MD5Util() { throw new AssertionError(MD5Util.class.getName()); } private static final char[] HEX = "0123456789abcdef".toCharArray(); static final byte[] DEF_SALT = "YT".getBytes(); static final byte[] EMPTY = new byte[0]; static final ThreadLocal<MessageDigest> MD5 = ThreadLocal.withInitial( CatchableSupplier.warp(() -> MessageDigest.getInstance("MD5")) ); /** * 将字节数组编码为十六进制字符串 * * @param bytes 要编码的字节数组 * @return 编码后的十六进制字符串 */ static String encode2HexStr(byte[] bytes) { final int nBytes = bytes.length; char[] result = new char[2 * nBytes]; int j = 0; for (byte aByte : bytes) { // Char for top 4 bits result[j++] = HEX[(0xF0 & aByte) >>> 4]; // Bottom 4 result[j++] = HEX[(0x0F & aByte)]; } return new String(result); } /** /** * 对给定的字节数组进行 MD5 摘要计算 * <p> * NOTE:此方法使用了一个预设的盐值(DEF_SALT),使用盐值可以增强哈希值的安全性,防止彩虹表攻击等 * * @param bytes 要进行摘要计算的字节数组 * @return 字节数组的 MD5 摘要结果 */ public static byte[] digest(byte[] bytes) { return digest(bytes, DEF_SALT); } /** * 对给定的字节数组进行 MD5 摘要计算,并使用提供的盐值(salt)进行加强 * * @param bytes 要进行摘要计算的原始字节数组 * @param salt 用于加强摘要计算的盐值字节数组 * @return 包含原始数据和盐值的字节数组的MD5摘要结果 */ public static byte[] digest(byte[] bytes, byte[] salt) { MessageDigest md = MD5.get(); if (bytes != null) { md.update(bytes); } if (salt != null) { md.update(salt); } return md.digest(); } /** * 使用带有盐值的 MD5算法 对给定的字节数组进行哈希处理 * * @param textBytes 要进行哈希处理的 字节数组 * @param saltBytes 用于增强安全性的盐值 字节数组 * @return 返回经过MD5哈希处理和盐值处理后的16进制字符串 */ public static String digest2Hex(byte[] textBytes, byte[] saltBytes) { byte[] digest = digest(textBytes, saltBytes); // 返回16进制字符串 return encode2HexStr(digest); } /** * 使用带有盐值的MD5算法对给定的字符串进行哈希处理 * * @param text 要进行哈希处理的原始字符串 * @param salt 用于增强安全性的盐值字符串 * @return 返回经过MD5哈希处理和盐值处理后的字符串 */ public static String digest2Hex(String text, String salt) { byte[] textBytes = text == null ? EMPTY : text.getBytes(); byte[] saltBytes = salt == null ? DEF_SALT : salt.getBytes(); return digest2Hex(textBytes, saltBytes); } /** * 使用预设的盐值对给定的字符串进行 MD5 哈希处理 * * @param textBytes 要进行哈希处理的 字节数组 * @return 返回经过MD5哈希处理后的字符串,其中包含了预设的盐值 * <p> */ public static String digest2Hex(byte[] textBytes) { return digest2Hex(textBytes, DEF_SALT); } /** * 使用预设的盐值对给定的字符串进行MD5哈希处理 * * @param text 要进行哈希处理的原始字符串 * @return 返回经过MD5哈希处理后的字符串,其中包含了预设的盐值 * <p> */ public static String digest2Hex(String text) { byte[] textBytes = text == null ? EMPTY : text.getBytes(); return digest2Hex(textBytes); } }

  

标签:return,盐值,param,哈希,加密,byte,Md5,MD5
From: https://www.cnblogs.com/bingrong/p/18573538

相关文章

  • 压缩包技巧:如何加密7-Zip压缩包?
    7z压缩包如何进行加密,之前和大家分享过,今天想和大家分享的是,如何使用7-zip对7z文件进行加密。7z加密教程如下:安装压缩软件,大家可以去官网下载软件安装好软件之后,我们右键点击需要压缩的文件,找到【7-Zip】,选择【添加到压缩包】来到压缩软件界面之后,软件自动默认文件将要压......
  • 网络安全-安全散列函数,信息摘要SHA-1,MD5原理
    安全散列函数     单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要。数据指纹)。还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5和SHA散列函数的要求    散列函数的目的是文件、消息或者其它数据块产生“指纹......
  • eCapture:一个无需 CA 证书,就能实现 SSL/TLS 加密明文捕获的工具
    今天给大家分享一款基于eBPF技术实现的用户态数据捕获工具【eCapture】什么是eCapture?eCapture是一款基于eBPF(ExtendedBerkeleyPacketFilter)技术实现的用户态数据捕获工具。能够无需CA证书即可捕获HTTPS和TLS通信的明文内容,非常适合于网络监控、安全审计和故障排查等场......
  • WiFi基础知识合集:WiFi标准、协议、信道、天线、工作原理、认证与加密
    liwen012024.11.24前言WiFi技术在移动互联网和物联网中都有广泛的应用,随着用户对速率、功耗、安全要求的不断提升,WiFi技术标准也在快速更新。对于普通用户、或是嵌入式应用软件开发,如果对WiFi基础原理有个基础的了解,在处理WiFi问题时或许会更有方向和思路。这个合集是我自己W......
  • MySQL主从中复制账号密码可以加密吗?
    搭建MySQL主从复制后,你会发现复制账号的密码是明文存储在mysq.mysql.slave_master_info这张系统表的User_password字段当中,早期MySQL版本中,账号密码存储在master.info文件中。如下案例所示:mysql> select * from mysql.slave_master_info\G*************************** 1. r......
  • 使用js实现摩斯密码的加密和解密
    constmorseCodeMap={'A':'.-','B':'-...','C':'-.-.','D':'-..','E':'.','F':'..-.','G':'--.',......
  • cryptography与zlib系列:数据压缩与加密
    cryptography与zlib系列:数据压缩与加密这里采用对称加密方法进行加密,首先创建一个Fernet加密器,这里的key,通过密钥派生函数与设定的密码进行创建,具有更强的保密功能。创建Fernet加密器函数importosfrombase64importurlsafe_b64encodefromcryptography.fernetimpor......
  • 公钥加密系统与离散对数问题
    概念1单向函数和陷门信息单向函数是一种可逆函数,其正向计算容易,但反向计算却非常困难。安全的公钥加密系统(PublicKeyCryptosystem,简称PKC)基于具有陷门的单向函数。陷门是一种辅助信息,利用它可以轻松计算单向函数的反函数。“陷门”一词来源于物理或机械陷阱的概念:单......
  • python实现加密认证通信系统 (附完整源码)
    python实现加密认证通信系统安装依赖完整源码代码解释:运行代码注意事项实现一个简单的加密认证通信系统可以通过使用对称加密(如AES)和消息认证码(如HMAC)来完成。以下是一个使用Python的cryptography库实现的示例,展示了如何建立一个简单的加密认证通信系统......
  • 40、安全_2(审计、钱包加密)
    查看建立的函数:select*fromdba_objectsfwheref.OBJECT_NAMElike'FUN%';策略1和策略2同时建立之后,查询结果:SQL>selectnamefromcar;NAME--------------------toyotavolvohondaSQL>selectname,costfromcar;NAME COST--------------------------......