【问题标题】:AES 256 Encryption: public and private key how can I generate and use it .net [closed]AES 256 加密:公钥和私钥如何生成和使用它.net [关闭]
【发布时间】:2013-09-21 21:39:21
【问题描述】:

关于 AES 256 加密:

  • 什么是公钥和私钥?
  • 如何生成这两个密钥?
  • 如何使用公众对数据进行加密?
  • 如何使用私钥解密数据?

【问题讨论】:

标签: c# java .net vb.net aes


【解决方案1】:

在 .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;
}

【讨论】:

  • 谢谢,我现在就试试。
  • 就像 user2787670 解释的那样,AES 256 是一种对称密码。这会生成一个 RSA 密钥对。
  • 没错。对称密钥适用于加密大量数据,而非对称密钥适用于小块数据。如果两方都有自己的密钥集,一个典型的场景是使用非对称密钥在两方之间安全地交换对称密钥,然后再使用对称密钥安全地交换大量数据。你应该调查一下。当然,这在很大程度上取决于您要达到的目标。
  • 嗨,我试过你的代码,但解密函数出现异常“密钥不存在”我不知道如何修复它。
  • @Yasser-Farag - 我不知道如何使用他的代码来接收这样的错误。一切正常。 Tuple&lt;string, string&gt; keys = CreateKeyPair(); string test = "we licensed?"; byte[] encrypted = Encrypt(keys.Item2, test); string decrypted = Decrypt(keys.Item1, encrypted);
【解决方案2】:

我认为你把事情搞混了。 AES 是一种对称密码,因此只有一个密钥用于加密和解密。像 RSA 这样的非对称密码有两个密钥。一个用于加密的公钥和一个用于解密的私钥。

And for reddit, you can indeed answer without being logged in.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 2010-09-21
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多