【发布时间】:2014-06-03 21:13:00
【问题描述】:
我正在开展一个项目,该项目需要我使用 Rijndael、CBC 和 PKCS7 加密一些数据...
我有一些示例向我展示了初始数据和应用 Rijndael 后我应该得到的结果...我尝试使用 .Net RijndaelManaged 类但没有得到与预期值相似的结果,我相信这是因为转换时出现了一些问题我的字节数组到字符串...
另一方面,使用 BouncyCastle 的 Rijndael 实现,我设法得到了与预期值非常相似的东西,不同之处在于我无法设置 PKCS7 填充模式......而我最大的问题是我找不到任何地方的文档!
这是我的 Encrypt 函数的一个非常简化的版本,请注意我在此处包含我的密钥和 IV 定义只是为了测试。
Public Shared Function Encrypt(data As Byte()) As Byte()
Dim theCipher As New Org.BouncyCastle.Crypto.Engines.RijndaelEngine()
Dim ciphr As New PaddedBufferedBlockCipher(New CbcBlockCipher(theCipher), new Pkcs7Padding())
Dim key As New KeyParameter(System.Text.Encoding.UTF8.GetBytes("---exampleKey---"))
Dim iv As Byte() = System.Text.Encoding.UTF8.GetBytes("---example-IV---")
Dim IVKey As New ParametersWithIV(key, iv)
ciphr.Init(True, IVKey)
Dim size As Integer = ciphr.GetOutputSize(data.Length)
Dim result(size) As Byte
Dim oLen As Integer = ciphr.ProcessBytes(data, 0, data.Length, result, 0)
oLen += ciphr.DoFinal(result, oLen)
If oLen < size Then
Dim tmp(oLen) As Byte
Array.Copy(result, 0, tmp, 0, oLen)
result = tmp
End If
Return result
End Function
【问题讨论】:
-
我编辑了函数,我找到了将PKCS7Padding设置为PaddedBufferedBlockCipher的方法,但结果没有改变!
-
请向我们展示您期望的输出和输出。如果您认为 byte[] / string 转换是问题,请也表明这一点。请注意,“类似的东西”不是一个很好的描述,并且通过加密,“类似的东西”可能会很遥远:)
-
@owlstead 感谢您的评论,这是实际数据:输入:
5400863131313334383030313030303634363835303030323031303130303236313230393131303130333233303130303030303030300A0A0A0A0A0A0A0A0A0A其中0A0A0A0A0A0A0A0A0A0A是填充。键:1x3oxy8pl0ri3jmhiv:X543a1K9mb6j4lP1预期结果是953EA291E9B2BFB1394C1571AB7D1923A456C516313143A8ADA21C81CAC14483F6E59EC916CBE5D6CEAD307BFB4D131DF03813E887BBF380F12877FBA647B157,这是正确的,因为我可以在 [aes.online-domain-tools.com] 中复制操作 -
好的,我看不出你的代码有什么特别的错误。如果你有完整的比赛,你还有问题吗?我无法修复 bouncy 的文档作为答案,这需要 100 万个左右的答案,这太可怕了 :)
-
好吧,我仍然认为我的代码中缺少某些内容或错误,这是我得到的输出:
953EA291E9B2BFB1394C1571AB7D1923A456C516313143A8ADA21C81CAC14483F6E59EC916CBE5D6CEAD307BFB4D131DF03813E887BBF380F12877FBA647B1570767DEACC0F3BFF64A1DD113EF54CBB600
标签: .net vb.net cryptography bouncycastle rijndael