爬虫逆向加密技术详解之消息摘要算法(哈希算法):SM3加密

一、SM3介绍

SM3是由中国国家密码管理局(GM/T 0004-2012)发布的密码散列算法,属于哈希函数家族。它广泛应用于数字签名、消息认证及数据完整性校验等领域,设计符合国家安全标准,具备抗碰撞性和不可逆性。

二、SM3的特点

  • 抗碰撞性‌:基于Merkle-Damgård结构,通过复杂的布尔函数和模运算设计,SM3能够有效抵御碰撞攻击和第二原像攻击。其安全性与SHA-256相当,但算法设计更贴合中国密码学标准。
  • 固定输出‌:输出长度为256位(32字节)。
  • 高效计算‌:采用分组密码结构,通过消息扩展和迭代压缩实现数据混淆与扩散,兼顾安全性和计算效率。
  • 国密标准‌:中国商用密码体系的核心算法之一。

三、如何一眼识别SM3加密?

3.1 长度判断

64位(64个字符‌)十六进制字符串:可能是SM3加密

3.2 验证字符集

  • 仅包含十六进制字符:确保哈希值只包含 0-9a-f(a、b、c、d、e、f)。注意事项:哈希密文虽然是小写,但是别人也许会在生成后用.toUpperCase() 全部转大写。
  • 无其他字符:如g-z、空格、特殊符号等。

3.3 搜索初始化变量

SM3初始化使用8个32位常量,初始值如下(十六进制):

IV = [
  0x7380166F, 0x4914B2B9, 0x172442D7, 0xDA8A0600,
  0xA96F30BC, 0x163138AA, 0xE38DEE4D, 0xB0FB0E4E
]

小技巧:可以将SM3初始化变量作为 SM3的特征值,没有魔改的情况下搜索十六进制值,如果搜不到,复制去控制台输出转换后搜索。 如果搜到了,点击进入函数内部,打上断点,重新触发断点,从堆栈(Call Stack,堆栈运行逻辑从下往上) ,从上往下依次查看哪里调用了特征值,就可以找到加密位置。

3.4 库函数或自定义函数

如果代码中使用了SM3相关的库(如sm-crypto)或函数名包含SM3,可确认是SM3哈希。

四、实现SM3加密

4.1 sm-crypto实现SM3加密

使用sm-crypto库实现示例:

const sm3 = require('sm-crypto').sm3;

// 待哈希的字符串
const input = "123456";

// 计算SM3哈希值(自动UTF-8编码)
const hashHex = sm3(input);

console.log("密文:", hashHex);
console.log("密文长度:", hashHex.length);

运行结果:

密文: 207cf410532f92a47dee245ce9b11ff71f578ebd763eb3bbea44ebd043d018fb
密文长度: 64

4.2 Python实现SM3加密

确保已经安装了 gmssl 库,可以使用以下命令进行安装:

pip install gmssl

gmssl 库实现SM3加密:

from gmssl import sm3, func

# 待哈希的字符串
input_str = "123456"
# 将字符串编码为字节类型
input_bytes = input_str.encode()
# 计算 SM3 哈希值
hash_hex = sm3.sm3_hash(func.bytes_to_list(input_bytes))

print("密文:", hash_hex)
print("密文长度:", len(hash_hex))

运行结果:

密文: 207cf410532f92a47dee245ce9b11ff71f578ebd763eb3bbea44ebd043d018fb
密文长度: 64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值