2009-08-29 4 views
2

내 서버가 RSACryptoServiceProvider를 만들고 해당 매개 변수를 변수 (RSAKeyInfo)로 내 보냅니다.C# .NET의 RSA 데이터를 어떻게 적절하게 해독합니까?

그런 다음 공개 키가 클라이언트로 전송되고 클라이언트는 공개 키를 사용하여 무언가를 암호화합니다.

이제 서버로 다시 전송할 때이 바로 데이터를 해독 할 수 있어야합니다. 따라서 RSA가 내 경우에 유용합니다.

그러나 이전에 만든 첫 번째 RSACryptoServiceProvider에서 가져온 매개 변수를 사용하여 RSACryptoServiceProvider를 다시 만들려고하면 "잘못된 데이터"예외가 발생합니다.

... 코드가 명확해질 수 있습니다.

크립토 만들기 :

class Cryptograph 
{ 
    public Cryptograph() 
    { 
     this.RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true); 
    } 
} 

를 해독에 나중에 액세스 :

byte[] encrypted = ...; 

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
rsa.ImportParameters(this.Cryptograph.RSAKeyInfo); 

byte[] decrypted = rsa.Decrypt(encrypted, false); 
Console.WriteLine(Utilities.ByteArrayToHexString(decrypted)); 

내가이 줄에서 "잘못된 데이터"예외가 :

byte[] decrypted = rsa.Decrypt(encrypted, false); 

나는 무엇이다 잘못하고있는거야? 어떻게 제대로 할 수 있습니까? 감사합니다.

P .: MSDN 또는 확실한 Google 결과 링크를 보내지 마십시오.이 모든 페이지를 읽었지만 여전히 작동하지 않습니다.

+0

클라이언트도 .net 클라이언트입니까? 동일한 버전의 .net을 사용하고 있습니까? –

답변

0

패딩을 사용하지 않는 암호화/암호 해독이 필요했으며 C# .NET은 기본적으로 제공하지 않았습니다. OpenSSL.NET이 그 일을 할 것입니다, 그러나, 나는 그것을 사용하려고 애써 왔습니다. (See this question if you want to help me make it work). :

3

공개 키로 무언가가 암호화되는 경우 해독을 위해 개인 키를 사용해야합니다. 난 당신이 해독을 위해 개인 키를 사용하고 있는지 모르겠다.

난 당신이 이미 읽었습니다 실현,하지만 당신은 암호화 페이지와이 해독 페이지를 참조 할 수 있습니다, 당신은 단계에 따라되어 있는지 확인하십시오 http://msdn.microsoft.com/en-us/library/te15te69.aspx

당신은 매우 짧은 메시지를 암호화하지 않는 한, RSA 암호화는 일반적으로 암호와 같이 대칭 키를 암호화하는 데 사용되어야하며 더 긴 메시지를 암호화/해독하는 것이 빠릅니다.

공개 키로 암호화 할 수있는 크기는 키의 길이와 관련이 있습니다.

+0

메시지 길이는 분명 동의합니다 .RSA는 일반적으로 대칭 암호화/해독보다 속도가 훨씬 빠르기 때문에 암호 또는 대칭 키 – zebrabox

+0

는 내 질문 재구성 보자. 내가 공개 키로 암호화 된 데이터를 포함하는 128 바이트의 바이트 배열을 을 을 나는 개인 키를 포함하는 128 바이트의 바이트 배열을 을 어떻게 해독 할. 암호화 된 바이트 배열 고마워요 :) – Lazlo

+0

개인 키는 어떻게 바이트 배열로 바뀌 었습니까? 128 비트 키는 대칭 키 여야합니다. 개인 키로 암호화 되었습니까? 그렇다면 공개 키로 암호를 해독하지만 해독 된 키에서 대칭 키를 다시 만들어야합니다.어떤 API 또는 언어가 키를 바이트 표현으로 변환 했습니까? –

관련 문제