Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
我公司有一个古老的图书馆,为我们加密数据。它不能在我们的新环境中使用,所以我试图为我们的旧数据编写一种解密方法。

加密的数据的填充为PKCS5,也就是RFC1423。在使用.net AesCryptoServiceProvider类的过程中,我注意到枚举器中没有内置这种填充方案。到目前为止,我所有解密的数据都是乱码。我们这里没有加密专家,我正在即时学习。任何帮助的指针,不胜感激。

我当前正在执行here中找到的代码。

此问题也发布在加密站点here上。但是,他们似乎并没有专门解决.net问题,因此我也想与这里的专家联系。

编辑

旧的加密具有以下设置,这些设置在手动完成时似乎会导致.net错误-特别是IV和块大小。

块大小:16
密码模式:cbc
加密算法:aes
哈希:sha1
IV:字节[0]
键长:128
盐:字节[0]
密钥:字节[16]

因此,密钥和块大小可以根据需要进行匹配,但是没有IV集会在.net中引发错误,并且块大小也会引发错误。

最佳答案

查看AesCryptoService padding文档,默认填充为PKCS#7。 PKCS#7填充是PKCS#5填充的超集。

有关更多信息,请参见PaddingMode Enumeration

仅为8字节的块大小定义了PKCS#5填充,而PKCS#7的填充将定义的块大小扩展为256字节。 PKCS#5永远不是AES的正确填充,AES的块大小为16字节,但是名称的使用是从其他历史加密库继承而来的。

请参见PKCS#7 Padding

关于c# - 如何在C#中手动使用PKCS5(RFC 1423)填充进行AES解密? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35302510/

10-14 12:47