>백엔드 개발 >C++ >.NET 5에서 .NET 6으로 업그레이드한 후 문자열 암호 해독이 차단되는 이유는 무엇입니까?

.NET 5에서 .NET 6으로 업그레이드한 후 문자열 암호 해독이 차단되는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-04 07:52:34320검색

Why is My String Decryption Cut Off After Upgrading from .NET 5 to .NET 6?

.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.