我正在开展一个项目,要求我使用Rijndael,CBC和PKCS7来加密一些数据......
我有一些例子向我展示了应用Rijndael后我应该得到的初始数据和结果......我尝试使用.Net RijndaelManaged类,但没有得到任何与预期值类似的东西,我相信它是因为将我的Byte数组转换为String ...时的一些问题
另一方面,使用BouncyCastle的Rijndael实现,我设法获得了与预期值非常相似的东西,不同之处在于我无法设置PKCS7填充模式......而且我最大的问题是我无法在任何地方找到文档!
这是我的加密功能的一个非常简化的版本,请注意我在此处包含了我的密钥和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
答案 0 :(得分:0)
基本上你的纯文本正好是块大小的N倍。这意味着在加密之前添加了一个完整的填充块,从而产生一个额外的密文块。此外,由于VB创建数组的方式,您需要使用Dim varName(size - 1) as Byte
。