是否存在类SHA1/SHA256的可解密固定长度加密算法?
固定长度输出的加密/哈希算法方案
非可逆哈希算法(固定长度输出)
除SHA系列外,这些算法都能返回固定长度结果:
- MD系列:MD5(128位输出),虽安全性已不适合高加密需求场景,但输出长度固定。
- RIPEMD系列:包含RIPEMD-128(128位)、RIPEMD-160(160位)、RIPEMD-256(256位)等不同长度的固定输出算法。
- BLAKE系列:BLAKE2b(最大支持64字节固定输出)、BLAKE2s(最大32字节),安全性和性能优于部分传统哈希算法。
- Keccak(SHA-3):可自定义固定输出长度(如256位、512位),是SHA系列的替代方案。
- Whirlpool:输出固定512位长度的哈希值,安全性较强。
可逆加密算法(实现固定长度输出)
你之前用AES没得到固定长度,大概率是没正确使用加密模式或填充方式,其实AES可以实现固定长度输出,另外还有这些方案:
- AES 结合固定填充与块模式:采用PKCS#7填充,将输入填充至AES块大小(16字节)的整数倍;若需要固定长度输出,可限制输入长度为固定块倍数,或先将任意长度输入哈希为固定长度再加密,最终输出固定长度密文。
- 格式保留加密(FPE):比如AES-FPE,能让加密输出和输入的长度、格式完全一致,适合需要固定长度可逆加密的场景(如固定位数的卡号、密码)。
- 固定输入长度的分组密码:直接使用分组密码的块大小作为输入长度,比如AES的16字节输入,加密后输出固定16字节密文;若输入过长,先通过哈希压缩至固定长度再加密即可。
其他固定长度输出方案
- HMAC:如HMAC-SHA256,输出固定256位长度,兼具消息认证和哈希的固定长度特性。
- Poly1305:一种轻量消息认证码,输出固定128位长度,常与ChaCha20配合使用,单独也可提供固定长度输出。
内容的提问来源于stack exchange,提问作者dhante
相关产品推荐
相关产品推荐

