2012-12-06 6 views
7

私はこのすべての暗号化のことについて全く新しく、与えられた文字列を暗号化するために単純なアプリケーションを実行しようとしています。ここに私のコードは次のとおりです。証明書を使用した暗号化

public static X509Certificate2 getPublicKey() 
{ 
    RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 

    X509Certificate2 cert2 = new X509Certificate2("c:\\certificate.cer"); 

    return cert2; 
} 


public static string cipherRequest(byte[] stringToEncrypt) 
{ 
    X509Certificate2 certificate = getPublicKey(); 

    RSACryptoServiceProvider rsa = certificate.PublicKey.Key as RSACryptoServiceProvider; 

    byte[] cryptedData = rsa.Encrypt(stringToEncrypt, true); 

    return Convert.ToBase64String(cryptedData); 
} 

public static void Main() 
{ 

    try 
    { 

     ASCIIEncoding ByteConverter = new ASCIIEncoding(); 

     byte[] test = ByteConverter.GetBytes("stringtoencrypt"); 

     string first = cipherRequest(test); 
     string second= cipherRequest(test); 

     Console.WriteLine("first: {0}", first); 
     Console.WriteLine("second: {0}", second); 

    } 
    catch(CryptographicException e) 
    { 
     Console.WriteLine(e.Message); 
    } 

} 

だから私はcipherRequestを呼び出すたびに、それは異なる結果を生成します。証明書がロードされていることを確認しましたが、結果が異なります。

どのような考えですか?

+3

この動作は仕様です。実際の問題はありますか? – SLaks

+1

なぜあなたは 'byte []'名前付き文字列を持っていますか? – SLaks

答えて

7

特定の攻撃を回避するために、実際の暗号化の前にランダムな埋め込みが追加されています。このため、暗号化メソッドを呼び出すたびに異なる結果が得られます。

詳細情報については、この記事を参照してください。

RSA in C# does not produce same encrypted string for specific keys?

+0

ありがとう、私はその結論に達することができたいくつかのより多くの読書:)私の悪い – antistes

関連する問題