後に間違ったバイトを生成し、基本的に、ここでのコードは次のとおりです。シーケンシャル.NET DESCryptoServiceProviderの暗号化と復号化は、第96
DES des = new DESCryptoServiceProvider();
PasswordDeriveBytes pdb = new PasswordDeriveBytes(new byte[]{123}, new byte[0]);
des.IV = new byte[8];
des.Key = pdb.CryptDeriveKey("DES", "MD5", 0, des.IV);
byte[] A = Enumerable.Range(1, 100).Select(i => (byte)i).Concat(new byte[4]).ToArray();
byte[] B = new byte[A.Length];
byte[] C = new byte[A.Length];
using (var encryptor = des.CreateEncryptor())
encryptor.TransformBlock(A, 0, A.Length, B, 0);
using (var decryptor = des.CreateDecryptor())
decryptor.TransformBlock(B, 0, B.Length, C, 0);
for (int i = 0; i < A.Length; i++)
if (A[i] != C[i])
Debugger.Break();
それはi == 96
で壊れます。どうして?
もう1つの小さな質問:.Concat(new byte[4])
を省略すると、最初のTransformBlockがArgumentExceptionをスローします。最後にソートされたバイトの配列を4つゼロで暗号化できないのはなぜですか?
ありがとうございました!したがって、解決策は8バイト以上のゼロバイトをエンコードし、結果をトリミングするようです。 –