문제

개인 및 공개 키가있는 Makecert에서 생성 한 인증서를 사용하고 있습니다. Java Side는이 공개 키를 사용하여 데이터를 암호화하고 .NET는 다시 해독합니다.

Java의 암호화 된 64 비트 인코딩 문자열을 해독하고 잘못된 데이터를 얻으려고합니다.

모든 것이 좋은 On.net End인지 확인하기 위해 Frist는 공개 키를 암호화하고 동일한 인증서를 사용하여 개인과 암호를 암호화하려고했습니다. 내 코드는 다음과 같습니다.

X509Certificate2 cert = GetCert(key, StoreName.My, StoreLocation.LocalMachine);
RSACryptoServiceProvider provider =  (RSACryptoServiceProvider)cert.PrivateKey;

RSACryptoServiceProvider publicprovider = (RSACryptoServiceProvider)cert.PublicKey.Key;

if (cert.HasPrivateKey)
    MessageBox.Show("Got private key");

byte[] encrypted = publicprovider.Encrypt(Encoding.UTF8.GetBytes(text), false);
byte[] decryptedBytes = provider.Decrypt(encrypted, false); 

여기서도 오류가 발생합니다. 내가 뭔가를 놓치고 있습니까?

인증서는 공개 및 개인 키 모두에서 유효합니다.

도움이 되었습니까?

해결책 4

나는 마침내 문제를 발견했다. 나는 그것을 RSA crypto 키로 정의하기 위해 Makecert의 열쇠를 넣지 않았습니다.

다른 팁

자체 서명 된 인증서와 같은 문제가 있었는데 문제는 스위치로 인증서를 생성했다는 것입니다. -sky signature 대신에 -sky exchange (귀하는 서명 및 암호화/암호 해독에 대한 교환에 서명을 사용합니다)

다음은 작동하는 Makecert에 대한 나의 전체 명령입니다.

makecert -r -pe -a sha1 -n "CN=MyName" -ss my -sr CurrentUser -sky exchange

다음 코드는 나에게 잘 작동합니다.

        RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider();
        privateKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent><P>83xxN7jvpg5z16pxz2tIQIdqd/EfmikR9Q2TjG2tosWkUSvtyx0xHZ9EqdTUbSGZZ+jgrabzkafYc7Mplylwew==</P><Q>yqcnYSZEXHwJvRWi2V09PNEENTozQZywcFptUUGar9TciaQvoNv3lpnfzUKNBRdhzq4lImxkamajZlTWE5buUw==</Q><DP>37HqilkbwyHwB6mOGhPkM3S1ujAK6qTk3JB2iEOTjMGrru9+7maJYz+Z47Wm3ARMXgyzrpZ9m8nqsJFfmoL11Q==</DP><DQ>v285tv8kMs2FkZYfuP/oOkwkkneBNejjj68Md2bmzlThZDCyQV2pvB1tmgPVHUsiPNCrCaKlFRISJzfa5rR8Ow==</DQ><InverseQ>fgJE2TRe/SS+YqW0/I+FtHrdfbbao0/R3pHD4r4oceZQUemlBgZ7DxOAetebHKthlOdjGkmfWYB8EU4XoWggqw==</InverseQ><D>FMLCwjy3wbAKiCANp6XFAJgz1o7365NFv0k41BpvasViTa4TgFFWH2ROJ7M9g0lPqJy+YrhrHcY9mqV5TVjTheQp0JeckrgO2B39XngPMAMMdne3rWGpf0Pfbj3FLfchMk6XYDXSZzCS2CmSeRA4aBMb+4R3YurixyJLrnGRMH0=</D></RSAKeyValue>");
        RSACryptoServiceProvider publicKey = new RSACryptoServiceProvider();
        publicKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");

        {
            string text = "foo";
            byte[] encrypted = publicKey.Encrypt(Encoding.UTF8.GetBytes(text), false);
            byte[] decryptedBytes = privateKey.Decrypt(encrypted, false);
        }

내보낸 개인 키가 Cert.Privatekey에서 나온 것이고 공개 키가 Cert.Publickey.key의 공개 키를 두 번 확인할 수 있습니까?

C#을 사용하여 X509 인증서와 RSA를 사용하여 Makcert 사용의 예제를 찾으려고 할 때이 페이지를 우연히 발견했지만 불행히도 솔루션의 일부만 제공했습니다. 나는 사람들이 관심을 가질 수있는 블로그 항목에 모든 비트를 모았습니다. 여기에서 찾을 수 있습니다.http://nick-howard.blogspot.com/2011/05/makecert-x509-certificates-and-rsa.html

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