web-dev-qa-db-ja.com

AES 256暗号化:公開鍵と秘密鍵.netを生成して使用するにはどうすればよいですか?

AES 256暗号化について:

  • 公開鍵と秘密鍵とは何ですか?
  • これらの2つのキーを生成するにはどうすればよいですか?
  • パブリックを使用してデータを暗号化するにはどうすればよいですか?
  • プライベートを使用してデータを復号化するにはどうすればよいですか?
11
Yasser-Farag

.Netでは、次のようにキーペアを作成できます。

public static Tuple<string, string> CreateKeyPair()
{
    CspParameters cspParams = new CspParameters { ProviderType = 1 };

    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams);

    string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false));
    string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true));

    return new Tuple<string, string>(privateKey, publicKey);
}

次に、公開鍵を使用して、次のようにメッセージを暗号化できます。

public static byte[] Encrypt(string publicKey, string data)
{
    CspParameters cspParams = new CspParameters { ProviderType = 1 };
    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams);

    rsaProvider.ImportCspBlob(Convert.FromBase64String(publicKey));

    byte[] plainBytes = Encoding.UTF8.GetBytes(data);
    byte[] encryptedBytes = rsaProvider.Encrypt(plainBytes, false);

    return encryptedBytes;
}

そして、秘密鍵を使用して次のように復号化します。

public static string Decrypt(string privateKey, byte[] encryptedBytes)
{
    CspParameters cspParams = new CspParameters { ProviderType = 1 };
    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams);

    rsaProvider.ImportCspBlob(Convert.FromBase64String(privateKey));

    byte[] plainBytes = rsaProvider.Decrypt(encryptedBytes, false);

    string plainText = Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length);

    return plainText;
}
34
dcastro

私はあなたが物事を混乱させていると思います。 AESは対称暗号であるため、暗号化と復号化の両方に使用できるキーは1つだけです。 RSAのような非対称暗号には2つの鍵があります。暗号化用の公開鍵と復号化用の秘密鍵。

そして、redditの場合、ログインしなくても実際に答えることができます。

9
user2787670