首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#与Java的Rijndael差异

C#与Java的Rijndael差异
EN

Stack Overflow用户
提问于 2014-12-15 20:10:24
回答 2查看 2.7K关注 0票数 2

我需要编写使用AES (Rijndael)加密字符串的Java代码。

有一个已经在工作的C#代码,用于相同的目的进行同样的加密。

C#代码:

代码语言:javascript
复制
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.KeySize = 256;
rijndaelCipher.BlockSize = 256;
rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password); // password is 32 bytes long
byte[] keyBytes = new byte[32];
System.Array.Copy(pwdBytes, keyBytes, 32);
rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = keyBytes;
ICryptoTransform transform = rijndaelCipher.CreateEncryptor();

我想出的Java代码:

代码语言:javascript
复制
byte[] sessionKey = SENDER_KEY.getBytes(StandardCharsets.UTF_8);
byte[] iv = SENDER_KEY.getBytes(StandardCharsets.UTF_8) ;
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
SecretKeySpec secretKeySpec = new SecretKeySpec(sessionKey, "AES");

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] cipheredText = cipher.doFinal(stringedXmlForSending.getBytes());

当我执行Java代码时,我得到了异常: java.security.InvalidAlgorithmParameterException:错误的IV长度:必须是16字节长

我真的不能用Java Rijndael加密(使用32字节密钥)编写吗?

另一个不同之处是,C#中的填充是PKCS7,而在Java中则是PKCS5。还能用吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-15 20:54:23

基本的Java加密扩展只提供与128位块大小的Rijndael兼容的AES实现。您应该使用128位BlockSize,以便与大多数实现AES的实现兼容。如果您这样做,那么填充是没有问题的,因为PKCS#5 is the same as PKCS#7 padding in AES

重要的是要注意,AES是标准化的,Rijndael不是标准化的。

票数 1
EN

Stack Overflow用户

发布于 2019-08-22 15:31:05

由于填充物的问题,我很难做到这一点。根据理论,来自java的PKCS#5应该与来自.Net的PKCS#7填充相匹配。当我深入研究这个问题时,我发现Base64编码器存在一个问题。Java有不同的库来将字节编码到base64中。默认情况下,java使用来自Base64的java.util,并给出了填充问题。当我使用不同的库来达到这个目的时,我可以得到所需的库。

代码语言:javascript
复制
org.apache.commons.codec.binary.Base64.encodeBase64String (byte[] encryptedtext)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27492292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档