C# RSA加密解密详解
什么是RSA
RSA是一种非对称加密算法,通过一个密钥对(公钥和私钥)来实现加密解密。公钥可以公开,用于加密数据;私钥用于解密加密后的数据。
RSA加密解密步骤
- 随机生成一对RSA密钥(公钥和私钥)
- 使用公钥对明文进行加密得到密文
- 使用私钥对密文进行解密得到明文
C#实现RSA加密解密
生成密钥对
在C#中可以使用RSACryptoServiceProvider
类来生成RSA密钥对。以下代码演示了如何使用这个类来生成一对密钥:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
string publicKey = rsa.ToXmlString(false); //得到公钥
string privateKey = rsa.ToXmlString(true); //得到私钥
这样我们就可以得到一对RSA密钥(公钥和私钥),分别保存到文件或者数据库中。
加密数据
在C#中,使用公钥对数据进行加密可以使用RSACryptoServiceProvider
类的Encrypt
方法。以下代码演示了如何使用该方法对数据进行加密:
byte[] data = Encoding.UTF8.GetBytes("Hello World");
byte[] publicKeyBytes = Encoding.UTF8.GetBytes(publicKey); //从密钥中获取公钥
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(Encoding.UTF8.GetString(publicKeyBytes));
byte[] encryptedData = rsa.Encrypt(data, false);
string encryptedText = Convert.ToBase64String(encryptedData); //将加密后的数据转成Base64编码的字符串
解密数据
在C#中,使用私钥对加密后的数据进行解密可以使用RSACryptoServiceProvider
类的Decrypt
方法。以下代码演示了如何使用该方法对数据进行解密:
byte[] encryptedData = Convert.FromBase64String(encryptedText); //从Base64编码的字符串中获取加密后的数据
byte[] privateKeyBytes = Encoding.UTF8.GetBytes(privateKey); //从密钥中获取私钥
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(Encoding.UTF8.GetString(privateKeyBytes));
byte[] data = rsa.Decrypt(encryptedData, false);
string plainText = Encoding.UTF8.GetString(data); //得到解密后的明文
示例
以下是一个使用RSA加密解密的示例,演示了如何加密密码并保存到数据库中,以及如何从数据库中读取加密后的密码并解密:
//生成密钥对
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
string publicKey = rsa.ToXmlString(false);
string privateKey = rsa.ToXmlString(true);
//加密密码并保存到数据库中
string password = "123456";
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
byte[] publicKeyBytes = Encoding.UTF8.GetBytes(publicKey);
rsa.FromXmlString(Encoding.UTF8.GetString(publicKeyBytes));
byte[] encryptedPasswordBytes = rsa.Encrypt(passwordBytes, false);
string encryptedPassword = Convert.ToBase64String(encryptedPasswordBytes);
//保存encryptedPassword到数据库中
//从数据库中获取加密后的密码并解密
//获取encryptedPassword
byte[] encryptedPasswordBytesFromDB = Convert.FromBase64String(encryptedPassword);
byte[] privateKeyBytes = Encoding.UTF8.GetBytes(privateKey);
rsa.FromXmlString(Encoding.UTF8.GetString(privateKeyBytes));
byte[] passwordBytesFromDB = rsa.Decrypt(encryptedPasswordBytesFromDB, false);
string passwordFromDB = Encoding.UTF8.GetString(passwordBytesFromDB);
以上代码演示了如何使用RSA非对称加密算法实现密码的加密和解密。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# rsa加密解密详解 - Python技术站