.NET 6으로 업그레이드 시 암호 해독 문제: 문자열 암호화 클래스
.NET 5 프로젝트에서 다음과 유사한 문자열 암호화 클래스 솔루션으로 제공된 것이 잘 작동했습니다. 그런데 .NET 6으로 업그레이드하면서 복호화된 문자열이 특정 지점에서 끊어졌습니다.
문제 분석
근본적인 원인은 . NET 5 및 .NET 6. 특히 DeflateStream, GZipStream 및 CryptoStream의 동작은 다른 Stream의 동작과 다릅니다. 유형.
해상도
이 변경 사항은 암호화 클래스의 Decrypt 메서드에 영향을 미칩니다. 이전에는 cryptoStream.Read를 호출할 때 버퍼가 채워지거나 스트림이 끝에 도달한 경우에만 작업이 완료될 것으로 예상되었습니다. 그러나 .NET 6에서는 이제 1바이트만 읽었거나 기본 스트림이 0을 반환하더라도 더 이상 사용할 수 있는 데이터가 없음을 나타내는 경우에도 cryptoStream.Read가 완료됩니다.
따라서 Decrypt 메서드를 다음으로 업데이트해야 합니다. 이 동작을 올바르게 처리하십시오. 한 가지 해결책은 cryptoStream.Read가 실제로 읽는 바이트 수를 확인하고 모든 데이터를 읽었는지 확인하는 것입니다.
var plainTextBytes = new byte[cipherTextBytes.Length]; var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
또는 더 효율적이고 간결한 코드를 위해 CopyTo 또는 StreamReader를 사용할 수 있습니다.
using (var plainTextStream = new MemoryStream()) { cryptoStream.CopyTo(plainTextStream); var plainTextBytes = plainTextStream.ToArray(); return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length); }
using (var plainTextReader = new StreamReader(cryptoStream)) { return plainTextReader.ReadToEnd(); }
위 내용은 .NET 5에서 .NET 6으로 업그레이드한 후 문자열 암호 해독이 차단되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!