我想把一个c#代码转换成python,比如这个问题:Python to C# AES CBC PKCS7
当纯文本的字符计数<;16,我给出了这两个代码相同的结果。(24个字符)
但当纯文本的字符计数>;=16,C#代码返回44个字符的结果,python返回24个字符的结果。这是相同的字符,但缺少python。
例如:c#结果是jfgdohpE8zrgls3Mpi8B+t/nGbzK1iEA3l1rJ0G8sFU=
,
python的结果是
jfgdohpE8zrgls3Mpi8B+g==
为什么?(我使用Python3和PKCS7库进行填充)
首先,这条线
必须在Python代码中删除,才能派生与C#代码中相同的键
然后可以重现您描述的问题:C#code返回,例如,对于base64编码的IV
J223ULe3Xf6PX1KfNVmEiw==
,以及您发布的明文和密钥,返回以下密文:Python代码生成此密文时:
原因是pypkcs7(issue #1)中的一个已知错误使得该包实际上无法使用,因为填充通常不再符合PKCS7定义(特别是如果填充前的明文长度是块大小的整数倍(AES为16字节))
因此,您需要一个不同的PKCS7实现。幸运的是,PyCryptodome提供了一个padding module(在遗留PyCrypto中不可用)。有以下变化
C#代码生成的密文与C#代码生成的密文相同(顺便说一句,解码实际上可以省略,因为加密过程会再次对密文进行编码;我保留这一点只是为了与旧实现进行比较)
作为旁注,使用以下方法可以更容易地导出密钥:
相关问题 更多 >
编程相关推荐