>백엔드 개발 >C++ >.NET 6으로 업그레이드한 후 해독된 문자열이 잘리는 이유는 무엇입니까?

.NET 6으로 업그레이드한 후 해독된 문자열이 잘리는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-01 01:28:13486검색

Why Are My Decrypted Strings Truncated After Upgrading to .NET 6?

.NET 6으로 업데이트한 후 문자열 암호화 문제

문제 요약:

.NET 프로젝트를 다음으로 업데이트하는 경우 버전 6에서는 암호화된 문자열을 해독하면 출력이 부분적으로 잘리는 것으로 확인되었습니다. 원래 입력과 비교합니다. 특히, 해독된 문자열의 일부가 잘려서 길이 차이가 일관됩니다.

원인:

이 문제는 영향을 미치는 .NET 6의 주요 변경으로 인해 발생합니다. CryptoStream과 같은 스트림. 이전에는 이러한 스트림이 제공된 모든 버퍼 공간이 채워지거나 스트림 끝에 도달할 때까지 읽기 작업을 완료하지 않는 고유한 동작을 했습니다.

.NET 6을 사용하면 이러한 스트림이 이제 다른 스트림과 더욱 일관되게 동작합니다. 길이 N의 버퍼를 사용하여 읽기 작업을 수행하는 경우 다음 중 하나가 완료됩니다.

  • 스트림에서 최소 1바이트를 읽거나
  • 기본 스트림이 스트림에서 0을 반환 자체 읽기 작업입니다.

코드 영향:

제공된 암호화/암호 해독 코드에서 사용 중인 CryptoStream이 이 변경 사항을 제대로 설명하지 않습니다. 특히 코드는 암호 해독 프로세스 중에 모든 바이트를 읽고 반환했는지 확인하지 못합니다.

해결책:

문제를 해결하려면 코드를 수정해야 합니다. 해독 중에 사용 가능한 모든 바이트를 읽도록 보장합니다. 이는 다음 접근 방식 중 하나를 사용하여 달성할 수 있습니다.

  • CopyTo 사용: 이 방법은 CryptoStream의 모든 데이터를 새 버퍼로 직접 복사하여 모든 바이트를 읽도록 보장합니다. .
using (var plainTextStream = new MemoryStream())
{
    cryptoStream.CopyTo(plainTextStream);
    var plainTextBytes = plainTextStream.ToArray();
    return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
} 
  • 사용 StreamReader: 일반 텍스트는 UTF8로 인코딩되므로 StreamReader를 사용하여 CryptoStream에서 직접 데이터를 읽는 것이 편리한 솔루션입니다.
using (var plainTextReader = new StreamReader(cryptoStream))
{
    return plainTextReader.ReadToEnd();
}  

이러한 수정 사항을 구현하면 코드가 다음을 보장합니다. 해독된 모든 바이트가 캡처되어 출력 문자열의 일부로 올바르게 반환됩니다.

위 내용은 .NET 6으로 업그레이드한 후 해독된 문자열이 잘리는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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