C#对称加密与非对称加密实例

2019-12-26 12:20:36王旭

目前最常用的非对称加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年发明,他们那时都是在MIT。.NET中也有RSA算法,请看下面的例子:

加密过程:

 

复制代码 private byte[] rsaCipherText;
private void mnuAsymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
    var rsa = 1;
    // Encrypt the data.
    var cspParms = new CspParameters(rsa);
    cspParms.Flags = CspProviderFlags.UseMachineKeyStore;
    cspParms.KeyContainerName = "My Keys";
    var algorithm = new RSACryptoServiceProvider(cspParms);
    var sourceBytes = new UnicodeEncoding().GetBytes(myData);
    rsaCipherText = algorithm.Encrypt(sourceBytes, true);
    MessageBox.Show(String.Format("Data: {0}{1}Encrypted and Encoded: {2}",
 myData, Environment.NewLine,
 Convert.ToBase64String(rsaCipherText)));
}

 

解密过程:

 

复制代码 private void mnuAsymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
    if(rsaCipherText==null)
    {
 MessageBox.Show("Encrypt First!");
 return;
    }
    var rsa = 1;
    // decrypt the data.
    var cspParms = new CspParameters(rsa);
    cspParms.Flags = CspProviderFlags.UseMachineKeyStore;
    cspParms.KeyContainerName = "My Keys";
    var algorithm = new RSACryptoServiceProvider(cspParms);
    var unencrypted = algorithm.Decrypt(rsaCipherText, true);
    MessageBox.Show(new UnicodeEncoding().GetString(unencrypted));
}

 

虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:

① Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。

② Alice的浏览器向银行的网站请求公钥。

③ 银行将公钥发送给Alice。