AesManaged를 사용하여 스트림을 암호화하려고합니다. 나는 오류없이 파일을 암호화 할 수 있지만 암호 해독시 다음 CryptographicException을 얻습니다.스트림 해독시 패딩이 유효하지 않습니다.
채우기가 잘못되어 을 제거 할 수 없습니다.
CryptoStream 처리 중에 예외가 발생합니다. I는 입력 데이터를 암호화하려면 다음을 사용 :
public byte[] Encrypt(Stream plain)
{
// Create a decrytor to perform the stream transform.
using(var msEncrypt = new MemoryStream())
{
using (ICryptoTransform encryptor = _myAes.CreateEncryptor(_myAes.Key, _myAes.IV))
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (BinaryWriter swEncrypt = new BinaryWriter(csEncrypt))
{
int buf_size = 32768;
byte[] buffer = new byte[buf_size];
int read = 0;
while ((read = plain.Read(buffer, 0, buf_size)) > 0)
{
swEncrypt.Write(buffer, 0, read);
}
}
return msEncrypt.ToArray();
}
}
을 그리고이 데이터를 해독하기 위해이 예외가 좋은 것 오는 이유에 대한
public byte[] Decrypt(Stream cipherText)
{
using (MemoryStream ms = new MemoryStream())
{
// Create a decrytor to perform the stream transform.
using (ICryptoTransform decryptor = _myAes.CreateDecryptor(_myAes.Key, _myAes.IV))
using (CryptoStream csDecrypt = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
using (BinaryWriter swDecrypt = new BinaryWriter(csDecrypt))
{
int buf_size = 32768;
byte[] buffer = new byte[buf_size];
int read = 0;
while ((read = cipherText.Read(buffer, 0, buf_size)) > 0)
{
swDecrypt.Write(buffer, 0, read);
}
}
return ms.ToArray();
}
}
어떤 아이디어.
private Crypto()
{
_myAes = new AesManaged();
_myAes.Padding = PaddingMode.PKCS7;
_myAes.KeySize = 128;
_myAes.Key = Enumerable.Repeat((byte)'B', 128/8).ToArray();
_myAes.IV = Enumerable.Repeat((byte)'C', 128/8).ToArray();
}
: 감사
UPDATE 여기
는 AES 객체가 생성 된 경우, 그것이 사용되는 실제 키가 아닌, 키와 IV가 단지 일시적으로 현재의 값으로 설정됩니다주의이다
당신이 _myAes를 만드는 방법을 보여 수있어? – SimonJ
@SimonJ - 내가 그 객체를 인스턴스화하는 스 니펫을 추가했습니다. –
이 오류는 여러 가지 원인으로 인해 발생할 수 있습니다. 대부분 잘못된 키 또는 IV를 사용하고 있습니다. 또한 데이터 손상으로 인해 발생할 수 있습니다. –