丟失或加密後添加一些字節/解密這是我的測試代碼:與RijndaelManaged的
Dim bah As New System.Security.Cryptography.RijndaelManaged
bah.Mode = Security.Cryptography.CipherMode.CBC
bah.Padding = Security.Cryptography.PaddingMode.ISO10126
bah.KeySize = 128
bah.BlockSize = 128
bah.FeedbackSize = 128
bah.Key = Key
bah.IV = {1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8}
Dim Encryptor = bah.CreateEncryptor()
Dim Decryptor = bah.CreateDecryptor()
Dim EncryptedBuffer(1023) As Byte
Dim encLen As Integer = Encryptor.TransformBlock(Data, 0, 256, EncryptedBuffer, 0)
Dim DecryptedBuffer(1023) As Byte
Dim decLen As Integer = Decryptor.TransformBlock(EncryptedBuffer, 0, encLen, DecryptedBuffer, 0)
Dim fbEncryptedBuffer() As Byte = Encryptor.TransformFinalBlock(Data, 0, Data.Count)
Dim fbDecryptedBuffer() As Byte = Decryptor.TransformFinalBlock(fbEncryptedBuffer, 0, fbEncryptedBuffer.Count)
「數據」是一個512字節數組,計數從0到255的兩倍。爲簡單起見,IV和Key是硬編碼值。
總之,有2個結果與此產生。
首先,DecryptedBuffer從0,1,2,3等開始都是正確的,但是在239處停止短路,或者總是比我應該指定的多少字節小17個字節。
其次,fbDecryptedBuffer成功獲取整個事物,但它的前面填充了16個看似隨機的字節。
這是正常的嗎?我不明白爲什麼要發生這種情況,而MSDN在這件事上並沒有什麼幫助。另外爲什麼有2種方法來轉換塊?他們是否應該結合使用?或者一個用於處理大塊而另一個用於處理整個事物?
編輯:哦,它實際上似乎2結果非常連接。通過刪除使用TransformBlock方法的代碼,TransformFinalBlock代碼可以正常工作。似乎有16個字節以某種方式卡在解密器中,然後在最終的轉換調用中堆積起來。