用RSA算法生成公钥私钥对,并加密解密文件内容
来源:互联网 发布:闪电电商和一洋淘宝 编辑:程序博客网 时间:2024/06/09 17:50
摘要:RSA算法生成公钥私钥对,发送方用RSA公钥加密,接收方用RSA私钥解密。文件内容签名和验证用DSA算法,用于验证文件内容没有被修改过。发送方除了发送加密后的密文,还要发送签名信息;接收方解密密文,还要验证接收的内容是否与原始发送的内容一致,即确保没有被篡改。
using System.Security.Cryptography;
private static readonly int CurrentBitStrength = 1024;
1. 生成公钥私钥对
/// <summary>
/// 生成公钥私钥对
/// </summary>
private void GenerateKeys()
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(CurrentBitStrength);
string publicPrivateKeysContent = rsaProvider.ToXmlString(true);
string publicOnlyKeysContent = rsaProvider.ToXmlString(false);
ViewData["public-private"] = Session["public-private"] = publicPrivateKeysContent;
ViewData["public-only"] = Session["public-only"] = publicOnlyKeysContent;
DSACryptoServiceProvider dsaProvider = new DSACryptoServiceProvider();
Session["dsa-public-private"] = dsaProvider.ToXmlString(true);
Session["dsa-public-only"] = dsaProvider.ToXmlString(false);
}
2. 加密
/// <summary>
/// 加密
/// </summary>
/// <param name="txtInput"></param>
/// <returns></returns>
private string EncryptContent(string txtInput)
{
int bitStrength = CurrentBitStrength;
string publicOnlyKeys = Session["public-only"].ToString();
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(bitStrength);
byte[] plainBytes = System.Text.Encoding.UTF8.GetBytes(txtInput);
//发送方RSA公钥加密
rsaProvider.FromXmlString(publicOnlyKeys);
byte[] cipherBytes = rsaProvider.Encrypt(plainBytes, false);
//发送方DSA签名
DSACryptoServiceProvider dsaProvider = new DSACryptoServiceProvider(CurrentBitStrength);
dsaProvider.FromXmlString(Session["dsa-public-private"].ToString());
byte[] signedBytes = dsaProvider.SignData(plainBytes);
Session["DSA-Signed-Digest"] = signedBytes;
return Convert.ToBase64String(cipherBytes);
}
3. 解密
/// <summary>
/// 解密
/// </summary>
/// <param name="txtEncryted"></param>
/// <returns></returns>
private string DecryptContent(string txtEncryted)
{
int bitStrength = CurrentBitStrength;
string publicPrivateKeys = Session["public-Private"].ToString();
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(bitStrength);
rsaProvider.FromXmlString(publicPrivateKeys);
//接收方RSA私钥解密
byte[] encryptedBytes = Convert.FromBase64String(txtEncryted);
byte[] plainBytes = rsaProvider.Decrypt(encryptedBytes, false);
//接收方DSA验证签名
byte[] signedBytes = (byte[])Session["DSA-Signed-Digest"];
DSACryptoServiceProvider dsaProvider = new DSACryptoServiceProvider();
dsaProvider.FromXmlString(Session["dsa-public-private"].ToString());
bool isSigned = dsaProvider.VerifyData(plainBytes, signedBytes);
return System.Text.Encoding.UTF8.GetString(plainBytes);
}
备注:
此代码经过asp.net mvc调试环境验证,此处贴出核心部分代码,供参考。
- 用RSA算法生成公钥私钥对,并加密解密文件内容
- linux下用openssl的RSA算法对文件加密解密
- java RSA加密算法,对消息m=25进行加密,生成密文c并解密。
- 对文件压缩加密,解密解压缩,非对称加密,RSA,AES算法
- 对文件压缩加密,解密解压缩,非对称加密,RSA,AES算法
- 加密解密---------->RSA算法
- RSA加密解密算法
- RSA加密解密算法
- RSA算法----加密解密
- PHP实现RSA算法对数据加密解密
- 对文件压缩加密/解密解压缩的例子,DES/RSA
- linux下使用openssl对文件RSA加密解密
- linux下使用openssl对文件RSA加密解密
- rsa加密与解密算法
- rsa加密与解密算法
- Android-RSA算法加密解密
- RSA加密解密算法Java
- RSA加密解密(读取文件)
- C语言中cin和cout高级格式化操作
- Hadoop 解除 "Name node is in safe mode"
- 数据库学习实践(四、五)--分页浏览、查询数据
- Trac, SVN的安装以及配置
- sort()函数与qsort()函数及其头文件
- 用RSA算法生成公钥私钥对,并加密解密文件内容
- 【基础排序】冒泡排序
- Oracle中Blob和Clob的作用
- 背包之01背包、完全背包、多重背包详解
- RedHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试
- 各种排序算法的比较
- ASCII码10 和 13
- gcc 编译参数
- Debug和Release区别