有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

C#AES在Java中使用CFB NoPadding模式进行加密

我在c#中使用AES/CFB/NoPadding算法加密数据,但在java中无法使用相同的模式解密。。我得到了不同的结果

CFB NoPadding模式允许输入任何字节的数据,并输出相同长度的数据

我可以在CBC填充模式下实现这一点。。但它在循环流化床无填充模式下不工作

有人能帮我吗

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;

共 (1) 个答案

  1. # 1 楼答案

    Java中的算法字符串中有一个鲜为人知的开关。试试"AES/CFB8/NoPadding"(注意B后面的8个字符)。它配置用作加密块反馈的比特数

    请注意,通常情况下,CFB的错误恢复已不再经常使用。使用完整的128位反馈要高效得多。或者你可以完全使用另一种模式,比如CTR或GCM模式加密