.Net 6의 암호 해독 차단 문제 해결
.Net 5에서 .Net 6으로 업그레이드할 때 다음을 사용하여 문자열을 암호화하는 문제가 발생합니다. 질문에 제공된 것과 유사한 암호화 클래스는 암호 해독 중에 잘립니다. 이 문제는 .Net 6을 사용할 때만 발생하며 다음 동작으로 이어집니다.
입력: "12345678901234567890"
.NET 5 출력: "12345678901234567890"
.NET 6 출력: "1234567890123456"
길이의 차이가 눈에 띄는데 원인은 다음과 관련된 .Net 6의 획기적인 변경에 있습니다. 다음과 같은 스트림의 동작 CryptoStream.
.Net 6의 주요 변경 사항
.Net 6부터 Read() 또는 ReadAsync()를 사용하여 스트림에서 읽기가 다음 중 하나일 때 완료됩니다. 다음 조건이 충족됩니다.
암호 해독 코드에 미치는 영향
제공된 코드에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!