Среда, 11 декабря 2019

c# seed 암호화 예제

93

경우에 따라 여러 키를 생성해야 할 수 있습니다. 이 경우 대칭 알고리즘을 구현 하는 클래스의 새 인스턴스를 만든 다음 생성 키 및 생성 IV 메서드를 호출 하 여 새 키와 IV를 만들 수 있습니다. 다음 코드 예제에서는 대칭 암호화 클래스의 새 인스턴스가 만들어진 후 새 키와 TV를 만드는 방법을 보여 줍니다. 암호화 알고리즘 개체(즉, x_alg)를 만들거나 인스턴스화하려면 대칭 알고리즘 x_alg = 대칭 알고리즘만들기(«Rijndael»)로 Rijndael 인수와 함께 대칭 알고리즘 클래스의 만들기 메서드를 사용합니다. 이 개체를 사용하여 키, IV 및 기타 모든 암호 속성을 설정할 수 있습니다. 대칭 키와 IV를 원격 당사자에게 전달하려면 일반적으로 비대칭 암호화를 사용하여 대칭 키를 암호화합니다. 키를 가로채는 모든 사람이 데이터를 해독할 수 있기 때문에 암호화하지 않고 안전하지 않은 네트워크에서 키를 보내는 것은 안전하지 않습니다. 암호화를 사용하여 데이터를 교환하는 것에 대한 자세한 내용은 암호화 체계 만들기를 참조하십시오. RSA의 경우 가져오기 및 내보내기 절차는 동일합니다. ToXmlString 및 FromXmlString 메서드를 사용합니다.

또한 .NET 프레임워크는 XML(확장 가능한 마크업 언어) 문자열을 사용하여 응용 프로그램 간에 알고리즘 매개 변수를 전송하는 것이 더 편리한 대안을 제공합니다. ExportParameters 메서드와 유사하게 ToXmlString(bool) 메서드를 사용하여 위에서 설명한 것처럼 Bool이 부울 값의 문자열을 나타내는 알고리즘 매개 변수의 XML 문자열 표현을 만들고 반환할 수 있습니다. 예를 들어 RSA 키 쌍 매개 변수는 문자열 key_pair = rsa로 내보낼 수 있습니다. ToXmlString(불); rsa는 RSACryptoServiceProvider 클래스의 인스턴스입니다. 위의 ImportParameters와 유사하게 이러한 매개 변수는 rsa_Bob.FromXmlString(key_pair)을 사용하여 얻을 수 있습니다. 해싱 알고리즘의 구현은 대칭 암호화의 이전 섹션에서 설명한 암호화보다 훨씬 간단합니다. 이 섹션에서는 ICryptoTransform, CryptoStream 및 메모리스트림 개체를 사용할 필요가 없습니다. 다음 표에는 해시 알고리즘이 나열되어 있습니다. 데스크톱 PC 응용 프로그램에서 이 작업을 하는 경우 암호를 일반 문자열에 저장하지 않는 것이 좋습니다. 문자열은 수동으로 삭제할 수 없습니다.

가비지 수집기에서 삭제되지만 문자열이 완전히 삭제되기 전에 문자열이 메모리에 얼마나 오래 유지되는지 알기 어렵습니다. 메모리에 남아 있을 때 쉽게 검색할 수 있습니다. 제안된 방법 중 하나는 암호 키 스트로크를 캡처하여 바이트 배열(또는 바이트 목록)에 저장하고 사용 직후(예: 바이트 배열을 0(0)로 채우는 등) 바이트 배열을 지우는 것입니다. 글쎄, 대부분의 초급 및 중급 프로그래머는 암호화를 가지고 노는 것을 좋아합니다. 이것은 내 인생에서 몇 가지 문제에 나를 했다 부분. 좋은 암호화 및 암호 해독 코드는 인터넷과 코드 프로젝트에서도 쉽게 찾을 수 있습니다. 왜 다른? 나는 그 뒤에 적절한 이유를 찾지 못했다. 그리고 내가 몇 가지를 발견했을 때, 나는 그들을 혼합하고 이것은 결과입니다. 나는 결과를 공유하고 싶었기 때문에이 기사를 공유했습니다. .NET Framework에서 제공하는 대칭 암호화 클래스에는 데이터를 암호화하고 해독하기 위해 키와 새로운 초기화 벡터(IV)가 필요합니다. 매개 변수 없는 생성자 사용 하 여 관리 되는 대칭 암호화 클래스 중 하나의 새 인스턴스를 만들 때마다 새 키와 IV가 자동으로 만들어집니다. 데이터 암호를 해독할 수 있는 사람은 누구나 동일한 키와 IV를 소유하고 동일한 알고리즘을 사용해야 합니다.

일반적으로 모든 세션에 대해 새 키와 IV를 만들어야 하며 키나 IV를 저장하지 않아야 합니다. 프로그램을 종료하기 전에 키, IV 또는 메모리에 남아 있는 다른 임의 시드 값과 같은 모든 중요한 정보는 삭제해야 합니다. 이 방법은 알고리즘 구현 클래스의 인스턴스에 대한 Clear 메서드와 메모리 스트림 또는 CryptoStream 개체에 대한 닫기 메서드를 사용하여 수행할 수 있습니다.