> 백엔드 개발 > C++ > .NET 6 암호 해독이 .NET 5에서 암호화된 문자열을 차단하는 이유는 무엇입니까?

.NET 6 암호 해독이 .NET 5에서 암호화된 문자열을 차단하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-01 14:47:10
원래의
1017명이 탐색했습니다.

Why Does My .NET 6 Decryption Cut Off Strings Encrypted in .NET 5?

.Net 6의 암호 해독 차단 문제 해결

.Net 5에서 .Net 6으로 업그레이드할 때 다음을 사용하여 문자열을 암호화하는 문제가 발생합니다. 질문에 제공된 것과 유사한 암호화 클래스는 암호 해독 중에 잘립니다. 이 문제는 .Net 6을 사용할 때만 발생하며 다음 동작으로 이어집니다.

입력: "12345678901234567890"

.NET 5 출력: "12345678901234567890"

.NET 6 출력: "1234567890123456"

길이의 차이가 눈에 띄는데 원인은 다음과 관련된 .Net 6의 획기적인 변경에 있습니다. 다음과 같은 스트림의 동작 CryptoStream.

.Net 6의 주요 변경 사항

.Net 6부터 Read() 또는 ReadAsync()를 사용하여 스트림에서 읽기가 다음 중 하나일 때 완료됩니다. 다음 조건이 충족됩니다.

  1. 최소 1바이트를 읽습니다. 스트림.
  2. 기본 스트림은 읽기 호출에서 0을 반환하며, 이는 더 이상 사용할 수 있는 데이터가 없음을 나타냅니다.

암호 해독 코드에 미치는 영향

제공된 코드에서 Decrypt() 메서드의 다음 섹션은 다음과 같습니다. 영향을 받지 않음:

var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
로그인 후 복사

.Net 6 이전에는 CryptoStream의 동작을 통해 작업이 완료된 것으로 간주되기 전에 버퍼가 완전히 채워지거나 스트림 끝에 도달했는지 확인했습니다. 그러나 .Net 6에서는 더 이상 그렇지 않으므로 해독 버퍼가 완전히 채워지지 않으면 잠재적인 데이터 손실이 발생할 수 있습니다.

해결 방법

이 문제를 해결하려면 , Decrypt() 메서드를 수정하여 모든 바이트가 올바르게 전송되었는지 확인할 수 있습니다. 읽기:

  • CopyTo() 메서드 사용:

    using (var plainTextStream = new MemoryStream())
    {
        cryptoStream.CopyTo(plainTextStream);
        var plainTextBytes = plainTextStream.ToArray();
        return Encoding.UTF8.GetString(plainTextBytes, 0, plainTextBytes.Length);
    } 
    로그인 후 복사
  • 사용 StreamReader.ReadToEnd():

    using (var plainTextReader = new StreamReader(cryptoStream))
    {
        return plainTextReader.ReadToEnd();
    }  
    로그인 후 복사

위 내용은 .NET 6 암호 해독이 .NET 5에서 암호화된 문자열을 차단하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿