我想知道 AES 加密的哪些填充模式在 java 和 C#.NET 中都很常见
谢谢巴皮
无,PKCS7,零
Dotnet 与所有 JCE 提供程序一样支持这 3 个。
如果您正在寻找 java<->.net AES,我会推荐 Bouncy Castle,它们都有免费的库。
Wikipedia中概述了几种填充算法。我已经看到在一些重要的应用程序(例如 Oracle 客户端)中使用了 PKCS7。它的实现非常简单,因此如果任一平台不支持开箱即用,您不必担心。
我正在做一个课堂项目,并以艰难的方式弄清楚了一些细节。首先,Java 支持开箱即用的 PKCS7 填充,但名称不同。它被称为PKCS5。一些程序员使用 Bouncy Castle 是因为错误地认为 Java 不支持 PKCS7,但支持不同的(较旧的)填充类型。这应该不重要,除了 Bouncy Castle 原来有可怕的错误。我的项目依赖于他们对 AES 的实施。如果您使用单个 doFinal 一次加密所有数据,它会起作用,但加密块会出现可怕的错误,结果甚至会根据用于传递数据的缓冲区大小而变化。切换回 Sun 的实现使用相同的代码给出了正确的结果。不用说,这花费了我们几天的调试时间。