各位读者你们好啊,今天讨论一下 HASH 算法,也是这个系列的完结篇!!!

Hash算法,又称散列算法,是一种从任意长度的数据字符串中创建小的、固定长度的值的函数,该值通常被视为数据的“指纹”。不同的数据往往会通过散列算法产生不同的结果,若两个不同的数据通过同一散列函数产生了相同的结果(即散列冲突),这种情况是非常罕见的。
散列算法的关键特点包括:
-
确定性:相同的输入始终会产生相同的输出。
-
快速计算:计算任何给定数据的哈希值是快速的。
-
非逆性:理想中,从散列值中重建原始输入应该是不可行的,即散列函数是单向的。
-
冲突抵抗:两个不同输入很难产生相同的输出值。
固定的输出,这个是逆向研究的一个关键特征。
以下是几种常见散列算法:
-
MD5:产生一个128位(16字节)的哈希值,通常用一个32字符的十六进制数展示。MD5已经不再安全,容易受到冲突攻击。
-
SHA-1:安全散列算法(Secure Hash Algorithm)的第一个版本,产生一个160位(20字节)的哈希值。SHA-1比MD5更安全,但现在也认为它是不安全的。
-
SHA-256:属于SHA-2家族,产生一个256位(32字节)的哈希值,相比于SHA-1和MD5,它更安全。
-
SHA-512:是安全散列算法2(SHA-2)家族的一个成员,产生一个512位的哈希值。
-
SHA-3:最新的成员,提供与SHA-2不同的哈希算法和结构,针对各种不同的应用和环境提供多种输出大小。
CRC32
CRC32,全名为循环冗余校验码 32位 (Cyclic Redundancy Check 32-bit),是一种用于检测数字网络和存储设备上数据错误的校验算法。CRC32 通过将字节序列散列为 32 位的整数值来工作,其基于多项式除法的原理。在理论上,可以使用多种多项式来执行 CRC32,但在实际应用中通常只有两种被广泛使用。
CRC32 算法通过特定的多项式进行计算,生成一个数值,该数值随数据一同传输或存储。接收方在收到数据时,会使用同样的算法重新计算数据的 CRC32 值,若计算结果与传输来的 CRC32 值相匹配,则数据被认为是完好无误的。如果不匹配,则表明数据在传输或存储过程中可能遭受到了干扰或损坏。
CRC32 广泛应用于各种场合,例如以太网、FDDI、ZIP 文件和其他归档格式,以及 PNG 图像格式等。更深入的技术细节可以在各种技术文档或在线资源中找到。CRC算法的强大之处在于其检测随机错误的能力,尤其是在不需要错误修复(仅检测和报告)的场合中非常有用。
算法讲解:
https://www.bilibili.com/video/BV1V4411Z7VA/
Java版
public static int getcrc32byapi(byte[] bytes) {
CRC32 crc32 = new CRC32();
crc32.update(bytes);
return (int) crc32.getValue();
}
Hook起来也非常的简单:
function hookCRC32() {
if (Java.available) {
Java.perform(function () {
var CRC32Class = Java.use('java.util.zip.CRC3

最低0.47元/天 解锁文章
6276

被折叠的 条评论
为什么被折叠?



