후 잘못된 바이트를 생성하는 코드입니다순차 .NET DESCryptoServiceProvider 암호화 및 암호 해독 여기, 기본적으로
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을 throw합니다. 결국 4 개의 0이없는 정렬 된 바이트 배열을 암호화 할 수없는 이유는 무엇입니까?
고마워요! 따라서 솔루션은 8 개의 0 바이트를 인코딩 한 다음 결과를 자르는 것으로 보입니다. –