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、異なる結果が生成されます。証明書が読み込まれていることを確認しましたが、結果が異なります。

何かご意見は?

4

1 に答える 1

7

特定の攻撃を回避するために、実際の暗号化の前にランダムなパディングが追加されます。これが、暗号化方式を呼び出すたびに異なる結果が得られる理由です。

詳細については、次の投稿を参照してください。

C#のRSAは、特定のキーに対して同じ暗号化された文字列を生成しませんか?

于 2012-12-06T18:56:51.910 に答える