Windows 용 RSA 키 쌍을 관리하는 도구를 만들고 있는데이 기능은 기본 제공 기능이 없으므로 RSA 암호화 기능을 광범위하게 사용합니다. 그물.RSACryptoServiceProvider를 사용하여 XML에서 RSA 공개 키를 가져 오면 PublicOnly 속성이 false로 설정됩니다.
이 도구는 기존 RSA 키 쌍을 나열하고, 새 키를 만들고, 키를 삭제하고, 키를 내보내고, 이전에 만든 XML 내보내기 (ASPNet_RegIIS.exe를 사용하여 내 보낸)에서 키를 가져 오는 것과 같은 다양한 기능을 제공합니다.
필자는 암호화 작업을 위해서만 공개 키를 가져 오는 것과 별개로 모든 기능을 제공합니다. 키 쌍이 원래 서버에서 작성되면 aspnet_regiis.exe
을 사용하여 공용 및 공개/개인용 내보내기가 xml에 작성됩니다.
절대적으로 필요한 경우가 아니면 개인 키가 배포되지 않도록 다른 컴퓨터에서 설정 파일을 암호화하는 옵션을 제공하고자합니다.
내가 전회 보낸 XML에서 공개 키를 가져올 때마다이 RSACryptoServiceProvider
의 PublicOnly
속성을 블록은 키 쌍은 공개 키와 개인 키를 가지고 있음을 나타내는 false로 설정됩니다. xml에 개인 키 정보가 포함되어 있지 않아 문제가 xml 파일 내에 없다는 것을 확인했습니다.
CspParameters
개체를 사용하고 플래그를 CspProviderFlags.UseMachineKeyStore
으로 지정할 때 문제가 발생하는 것으로 보입니다. Csp 매개 변수를 지정하지 않고 RSACryptoServiceProvider
을 구성한 다음 xml에서 키를 가져 오면 PublicOnly
속성이 false로 올바르게 설정됩니다. 그러나 키의 이름을 다른 방법이 없기 때문에 그것은 내가 RSACryptoServiceProvider
을 구성 할 때 CspParameters
개체를 사용하도록 강요하고 암호화 작업을 위해 나중에 사용할 수 있도록 내가 키 컨테이너를 이름을 지정해야하기 때문에
String xmlText = File.ReadAllText(filePath);
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
csp.FromXmlString(xmlText);
//csp.PublicOnly equals true;
컨테이너.
String xmlText = File.ReadAllText(filePath);
CspParameters cspParams = new CspParameters();
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.KeyContainerName = keyContainerName;
RSACryptoServiceProvider csp = new RSACryptoServiceProvider(cspParams);
csp.PersistKeyInCsp = true;
csp.FromXmlString(xmlText);
//csp.PublicOnly equals false;
이 코드의 다양한 버전을 사용해 보았지만 문제가 남아 있습니다. RSA Encryption public key not returned from container?과 같은 유사한 질문이 있지만이 문제는 다르며 만족스러운 대답은 없다고 생각합니다.
그렇다면 XML에서 RSA 공개 키를 가져 와서 컨테이너에 공개 키 쌍만 존재하도록 보장하면서 키 컨테이너에 이름을 부여하려면 어떻게해야합니까? XML에서 전체 키를 가져오고 또한 주요 수출 할 수 있도록 플래그를 설정할 때
편집이 지역 주변
또한 연구는 또한 문제를 보여줍니다. 이 플래그가 선 csp.FromXmlString(xmlText)
던져 유형 "지정된 잘못된 플래그"의 예외 오브젝트 CSP 매개 변수에 지정된
CspProviderFlags.UseArchivableKey;
;
정말 설명 할 수 없습니다. 키가 생성되어 이전에 XML로 내보내기되었습니다. 키를 이전에 내 보낸 경우 가져 오기가 가능하고 다시 내보낼 수 있어야합니다.
나는 이것에 대해 많은 연구를했지만이 문제 중 하나에 대한 답을 볼 수 없습니다.
이것이 현재 기본값이라고 생각하여 PROV_RSA_FULL에서 cP Provider 유형을 변경하려고 시도했지만 PROV_RSA_FULL 대신이 키를 사용하여 키가 생성되었을 수 있다고 생각했지만 차이점이 없습니다.