C# AES 在 Java 中使用 CFB NoPadding 模式加密
C# AES encrypt with CFB NoPadding Mode in Java
我在 c# 中使用 AES/CFB/NoPadding 算法加密数据,但我无法在 java 中使用相同模式解密。我得到了不同的结果。
CFB-NoPadding 模式允许任何字节数据输入和相同长度的数据输出。
我可以在使用 CBC 填充模式时做到这一点..但它在 CFB 无填充模式下不起作用。
谁能帮帮我?
C#加密代码:
_assistantRM.Mode = CipherMode.CFB;
_assistantRM.Padding = PaddingMode.None;
_assistantRM.FeedbackSize = 8;
_assistantRM.IV = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF };
_assistantRM.Key = _assitantKey;
Java解密代码:
SecretKeySpec sk = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, sk, new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF });
byte[] result = cipher.doFinal(bytes);
return result;
Java中的算法字符串中有一个鲜为人知的开关。请尝试 "AES/CFB8/NoPadding"
(注意 B 后面的 8 个字符)。它配置用作加密块反馈的位数。
注意CFB的错误恢复一般用的不多了。使用完整的 128 位反馈会更有效率。或者您可以完全使用其他模式,例如 CTR 或 GCM 模式加密。
我在 c# 中使用 AES/CFB/NoPadding 算法加密数据,但我无法在 java 中使用相同模式解密。我得到了不同的结果。
CFB-NoPadding 模式允许任何字节数据输入和相同长度的数据输出。
我可以在使用 CBC 填充模式时做到这一点..但它在 CFB 无填充模式下不起作用。
谁能帮帮我?
C#加密代码:
_assistantRM.Mode = CipherMode.CFB;
_assistantRM.Padding = PaddingMode.None;
_assistantRM.FeedbackSize = 8;
_assistantRM.IV = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF };
_assistantRM.Key = _assitantKey;
Java解密代码:
SecretKeySpec sk = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, sk, new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF });
byte[] result = cipher.doFinal(bytes);
return result;
Java中的算法字符串中有一个鲜为人知的开关。请尝试 "AES/CFB8/NoPadding"
(注意 B 后面的 8 个字符)。它配置用作加密块反馈的位数。
注意CFB的错误恢复一般用的不多了。使用完整的 128 位反馈会更有效率。或者您可以完全使用其他模式,例如 CTR 或 GCM 模式加密。