AES 256加密:公钥和私钥我如何生成和使用它.net

Yas*_*rag 10 .net c# java vb.net aes

关于AES 256加密:

  • 什么是公钥和私钥?
  • 我怎样才能生成这两个键?
  • 如何使用公共加密数据?
  • 如何使用私有来解密数据?

dca*_*tro 34

在.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);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用您的公钥来加密消息,如下所示:

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;
}
Run Code Online (Sandbox Code Playgroud)

并使用您的私钥解密如下:

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 究竟.对称密钥适用于加密大量数据,而非对称密钥适用于小块.如果双方拥有自己的密钥集,典型的情况是使用非对称密钥在两方之间安全地交换对称密钥,然后使用对称密钥来安全地交换大量数据.你应该研究一下.当然,这很大程度上取决于你想要实现的目标. (4认同)

小智 9

我觉得你在混淆.AES是对称密码,因此只有一个密钥用于加密和解密.像RSA这样的非对称密码有两个密钥.用于加密的公钥和用于解密的私钥.

对于reddit,您确实可以在不登录的情况下回答.