В основном, вот код:
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
.Почему?
Еще один маленький вопрос: пропуск .Concat(new byte[4])
заставляет первый TransformBlock генерировать ArgumentException.Почему он не может зашифровать массив отсортированных байтов без 4 нулей в конце?