문제

외부 라이브러리를 사용하지 않고 C#에서 OpenSSL PKCS# 8 RSA를 사용하여 만든 개인 키를 읽는 방법을 찾으려고 노력하고 있습니다.

누군가 내가 어떻게 할 수 있는지 알고 있습니까?

도움이 되었습니까?

해결책

이것을하는 가장 쉬운 방법 ~와 함께 외부 라이브러리는 (무료)를 사용하고 있습니다. Chillkat 공개 / 개인 키 구성 요소: 그것을 사용하여, 키 가져 오기를 사용하여 수행 할 수 있습니다. 몇 줄의 코드 그리고 도서관의 나머지 부분에 대해 $ 149 정도를 기꺼이 지불한다면 일반적인 암호화 개념을 다루는 것도 훨씬 쉽습니다.

일반 Microsoft .NET 프레임 워크와 달리 Mono Project 하다 있는 것 같습니다 PKCS8 구현 무엇을 위해 전체 C# 소스 사용할 수 있습니다. 이것은 모노 코드와 관련된 (LGPL 2.0) 라이센스가 귀하를 위해 작동한다고 가정 할 때 외부 라이브러리에 절대적으로 의존 할 수없는 경우 시작점으로 적합 할 수 있습니다.

마지막으로, PKCS #8 형식 구문 분석하기가 어렵지 않으며 RSA/DSA 키 쌍 개체는 PKCS #11 그리고 모든 비트가 어디로 가는지 알아 내면 .NET X509Certificate로 변환하기가 비교적 쉽습니다. 실제로 VB.NET에서 실제로이 작업을 수행했지만 불행히도 해당 코드를 공유 할 수는 없습니다.

다른 팁

답변 해주셔서 감사합니다.

RSA 키를 만들기위한 내 스크립트를 사용한 OpenSSL Whit :

(Linux 스크립트)

openssl genrsa -out ${NAME}_openssl.key 2048
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER

C#에서는 XML 형식의 개인 키가 필요합니다. 나는 사용했다 이것 이것을 할 파서.

도전을 해독하려면 사용해야합니다.

  byte[] challange = server.getChallenge();

  RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();

  rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);

  byte[] plaintext = rsaProvider.Decrypt(challange, false);

Whit 서버 인증서를 암호화하려면 사용해야합니다.

  RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;

  byte[] answer = RsaProvider.Encrypt(plaintext, false);

Javascience Consulting에 감사드립니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top