2012-01-18 11 views
5

Mam obiekt AsymmetricKeyParameter dla klucza prywatnego i publicznego. Jaki jest najłatwiejszy sposób sprawdzenia, czy pasują?Jak sprawdzić, czy para kluczy prywatnych/publicznych pasuje do siebie przy użyciu (.NET/BouncyCastle)?

Próbuję zaszyfrować jakiś tekst (klucz prywatny) i odszyfrować część tekstu (klucz publiczny). Do tej pory nie byłem w stanie tego zrobić, ale wydaje się, że to niewłaściwe podejście.

Aktualizacja: Oto przykładowy kod:

X509Certificate2 c = new X509Certificate2(@"certificate.cer"); 
byte[] privateKeyData = System.IO.File.ReadAllBytes(@"private.key"); 
Org.BouncyCastle.X509.X509Certificate cert = DotNetUtilities.FromX509Certificate(c); 


RsaPrivateCrtKeyParameters privateKey = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyData); 
RsaKeyParameters publicKey = (RsaKeyParameters)cert.GetPublicKey(); 

if (privateKey.Modulus.Equals(publicKey.Modulus) && publicKey.Exponent.Equals(privateKey.PublicExponent)) 
{ 
    //they match 
} 
+0

Jeśli odszyfrowujesz kluczem publicznym, czy faktycznie próbujesz podpisać dane zamiast szyfrować? – weston

+0

Chcę dopasować klucze, po prostu nie wiem, jak to zrobić. –

Odpowiedz

6

Najprostszym sposobem na sprawdzenie, czy klucz prywatny i klucz publiczny są zgodne, jest zaszyfrowanie danych za pomocą klucza publicznego i sprawdzenie, czy można je odszyfrować za pomocą klucza prywatnego - lub, alternatywnie, podpisanie danych za pomocą klucz prywatny i sprawdź, czy możesz go zweryfikować za pomocą klucza publicznego.

Jeśli klucze są kluczami RSA, można oddać klucz publiczny do Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters i klucz prywatny do Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters i sprawdzić, czy Modulus jest taka sama i że Exponent klucza publicznego jest równa PublicExponent klucza prywatnego. Jeśli chcesz się naprawdę spodobać, możesz również sprawdzić wszystkie pozostałe parametry klucza prywatnego (postępuj zgodnie z PKCS#1 sekcja 3.2).

+0

Dziękuję za wspaniałą odpowiedź! Używam techniki dopasowywania wykładników i modułów. –

+0

Przy okazji pierwszego zdania nie ma to większego sensu. Powinienem zaszyfrować z publicznym i odszyfrować z PRIVATE, prawda? –

+0

@ Jewgeni Petrov: Tak, masz rację. Poprawiłem zdanie. –

0

Usiłuję zaszyfrować tekst (klucz prywatny) i odszyfrować tekst (klucz publiczny).

Klucz publiczny nie jest przeznaczony do deszyfrowania. W PKI klucz publiczny jest udostępniany wielu stronom w celu szyfrowania danych, które zamierza wysłać do posiadaczy klucza prywatnego, a następnie klucz prywatny służy do odszyfrowania przesłanych danych.

+3

Chociaż podpisywanie odbywa się przez zaszyfrowanie bezpiecznego hasha treści podpisanej kluczem prywatnym, który można następnie zweryfikować przez odszyfrowanie z publicznym. Nit-pick, +1 do wszystkich. –

+0

Jak zatem sprawdzić, czy klucz prywatny i publiczny są zgodne? –

Powiązane problemy