自定义Feistel加密算法解密失败:无法还原原始明文
Feistel加密解密无法还原明文的排查方向
- 轮密钥顺序错误:加密时轮密钥按
K1→K2→…→Kn顺序使用,解密必须逆序用Kn→Kn-1→…→K1,顺序搞反直接导致结果偏差。 - 轮函数实现不一致:加密和解密的轮函数
F代码必须完全一致,哪怕是微小的逻辑差异(比如加密用异或解密用加法)都会破坏可逆性。 - 最后一轮交换逻辑错误:Feistel加密的最后一轮通常不交换左右分组,但解密时要对应调整——如果加密最后一轮交换了,解密最后一轮也得交换,反之亦然,逻辑必须对称。
- 分组拆分/合并逻辑偏差:检查明文拆分左右分组的规则(比如按字节数均分、位拆分),解密时的合并逻辑必须和加密完全逆向,不能出现分组长度计算错误。
- 编码与字节处理失误:文本转字节、字节转整数的逻辑在加密和解密中要统一,比如加密时用
utf-8编码字符串,解密时必须用同样编码转回,避免乱码或数据丢失。 - 填充/去填充逻辑不匹配:如果明文长度不符合分组要求,加密时的填充规则(比如补0、补特定字符)和解密时的去填充规则必须严格对应,多删或漏删填充位都会导致明文异常。
请贴出你的Python加密和解密实现代码,方便精准定位问题。
内容的提问来源于stack exchange,提问作者حداد Haddad
相关产品推荐
相关产品推荐

