Java学习笔记-XXH3哈希算法

embedded/2025/3/22 11:45:59/
XXH3是由Yann Collet设计的非加密哈希算法,属于XXHash系列的最新变种,专注于极速性能与低碰撞率,适用于对计算效率要求极高的场景。
极速性能
  • 在RAM速度限制下运行,小数据(如 1-128 字节)处理可达纳秒级,吞吐率高达 0.24–0.71 GB/s。
  • 大数据(如 100KB)处理可在微秒级完成,性能远超传统哈希算法(如 MD5、SHA-1)。
确定性输出
  • 所有平台(little/big endian)对相同输入生成一致的哈希值,确保跨环境兼容性。
多平台优化
  • 支持 SSE2、AVX2 等指令集加速,适配不同硬件架构以最大化性能。
使用
  • Python可以提供第三方库的支持,相关的使用也比较简单,只需要安装第三方库即可。

    • pip install xxhash
    • 简单的几个使用示例如下:
    python">from xxhash import xxh3_64_intdigest
    from xxhash import xxh3_128_intdigest
    from xxhash import xxh3_128_hexdigestMAX_INT64 = sys.maxsize  # (1 << 63) - 1def xxh3_64_digest_int(*args: str) -> int:return xxh3_64_intdigest("".join(args))def xxh3_128_digest_int(*args: str) -> int:return xxh3_128_intdigest("".join(args))def xxh3_128_digest_hex(*args: str) -> int:return xxh3_128_hexdigest("".join(args))
    
  • Java同样提供了第三方库的支持,只需要引入相关的依赖包。

    • 引入依赖。开源提供的依赖还是挺多的,比如zero-allocation-hashing、hash4j等。需要注意的是hash4j依赖包后续的版本需要JDK11+。
    java"><!-- ZeroAllocationHashing依赖包 -->
    <dependency><groupId>net.openhft</groupId><artifactId>zero-allocation-hashing</artifactId><version>0.16</version>
    </dependency><dependency><groupId>com.dynatrace.hash4j</groupId><artifactId>hash4j</artifactId><version>0.20.0</version>
    </dependency>
    
    • zero-allocation-hashing依赖包的几个简单使用示例如下:
    java">import lombok.extern.slf4j.Slf4j;
    import net.openhft.hashing.LongHashFunction;
    import net.openhft.hashing.LongTupleHashFunction;import java.math.BigInteger;/**** @description Digest Utils* @author */
    @Slf4j
    public class DigestUtils {/*** xx3 hash 64 bits* @param source* @return*/public static long xx3Hash64Bits(String source) {return LongHashFunction.xx3().hashBytes(source.getBytes());}/*** xx3 hash 128 bits* @param source* @return*/public static BigInteger xx3Hash128Bits(String source) {long[] hashes = LongTupleHashFunction.xx128().hashBytes(source.getBytes());/**// 处理为无符号BigInteger unsignedHigh = new BigInteger(1, toBytes(hashes[1]));BigInteger unsignedLow = new BigInteger(1, toBytes(hashes[0]));**/return new BigInteger(1, toBytes(hashes[1])).shiftLeft(64).add(new BigInteger(1, toBytes(hashes[0])));}/*** xx3 hash 128 bits digest* @param source* @return*/public static String xx3Hash128BitsDigest(String source) {return xx3Hash128Bits(source).toString(16);}private static byte[] toBytes(long value) {byte[] bytes = new byte[8];for (int i = 7; i >= 0; i--) {bytes[i] = (byte) (value & 0xFF); // 取低8位value >>>= 8; // 无符号右移,高位补0}return bytes;}}
    

http://www.ppmy.cn/embedded/174679.html

相关文章

验证码设计与前端安全:实现方式、挑战与未来发展趋势深度分析

验证码&#xff08;CAPTCHA&#xff09;是一种用于区分人类用户和自动化程序&#xff08;如机器人&#xff09;的技术&#xff0c;广泛应用于登录、注册、表单提交等场景。然而&#xff0c;验证码的设计和实现不仅关乎用户体验&#xff0c;还涉及到前端安全问题。 1. 验证码的…

机器学习之KL散度推导

机器学习之KL散度推导 预备知识 熵、交叉熵、条件熵 熵 (Entropy) 这一词最初来源于热力学。1948年&#xff0c;克劳德爱尔伍德香农将热力学中的熵引入信息论&#xff0c;所以也被称为香农熵 (Shannon entropy)、信息熵 (information entropy)。 对于具体熵的定义和用法推荐…

Python第六章07:元组的定义和操作

# tuple元组的定义和操作# tuple元组定义用小括号&#xff1a;(1,2,3,4,5),可以是不同类型元素 # 给变量定义元组时&#xff0c;写括号不写tuple&#xff1a; a (1,2,3,4,5) # 变量 &#xff08;&#xff09; 变量 tuple&#xff08;&#xff09; 空元组变量 # tuple…

《双指针算法指南:LeetCode 经典题解(C++实现)》

《双指针算法指南&#xff1a;LeetCode 经典题解&#xff08;C实现&#xff09;》 —— 从快慢指针到对撞指针&#xff0c;刷题效率提升 200%&#xff01; 常⻅的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是左右指针。 对撞指针&#xff1a; ⼀般⽤于顺…

31天Python入门——第5天:循环那些事儿

你好&#xff0c;我是安然无虞。 文章目录 1. while循环1.1 while循环的嵌套1.2 补充学习:print函数 2. for循环2.1 range函数2.2 for循环2.3 continue和break以及return2.4 for循环的嵌套 3. 补充学习3.1 enumerate函数3.2 zip函数3.3 不要在遍历列表的过程中删除元素 循环 是…

Linux信号的诞生与归宿:内核如何管理信号的生成、阻塞和递达?

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;Linux学习、游戏、数据结构、c语言基础、c学习、算法 目录 一、认识信号 二、信号的产生 1.键盘输入 2.系统调用 3.系统指令 4.硬件异常 5.软件条件 三、信号的保存 1.block 2.pending 3.handler 四、信号…

【解析 ECharts 图表样式继承与自定义】

解析 ECharts 图表样式继承与自定义 本文将详细介绍 ECharts 的样式继承机制&#xff0c;从其原理、演进到实际应用场景&#xff0c;并结合实际开发经验分享一些实战技巧&#xff0c;帮助开发者在构建数据可视化页面时实现更统一、灵活的样式管理与高效开发。 一、背景与来龙…

QT Quick(C++)跨平台应用程序项目实战教程 1 — 教程简介

引言 在当今的软件开发领域&#xff0c;跨平台应用程序的需求日益增长。开发者们希望能够编写一次代码&#xff0c;然后在多个平台上运行&#xff0c;如Windows、macOS、Linux、Android和iOS。Qt作为一个强大的跨平台C框架&#xff0c;提供了丰富的工具和库&#xff0c;使得开…