C# RSA数据加密
第一步产生密钥类 CreateKey using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO; namespace RSA
{
/// <summary>
/// 创建公钥和私钥
/// </summary>
public static class CreateKey
{
#region GetPublicKey
/// <summary>
/// 产生公钥和私钥
/// </summary>
public static void GetPublicKey()
{
//RSA必须是一个对象,产生公钥和私钥
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
using (StreamWriter writer = new StreamWriter("PrivateKey.xml"))
{
// ToXmlString中 true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥。
writer.WriteLine(RSA.ToXmlString(true));
}
using (StreamWriter writer = new StreamWriter("PublicKey.xml"))
{
writer.WriteLine(RSA.ToXmlString(false));
} } }
#endregion }
} 第二步是否含有公钥和密钥 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; namespace RSA
{
public static class ContainsKey
{
#region Contain
/// <summary>
/// 是否含有文件名
/// </summary>
/// <param name="Name">传入的文件名</param>
/// <returns></returns>
public static bool Contain(string Name)
{
string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
string full=path+Name;
full = full.Replace("\\",System.IO.Path.DirectorySeparatorChar.ToString()); if (!File.Exists(full))
{
return false;
}
return true;
}
#endregion #region Create
/// <summary>
/// 判断是否含有,如果有返回true,如果没有创建返回true
/// </summary>
/// <returns></returns>
public static bool Create()
{
try
{
if (Contain("PrivateKey.xml"))
{
return true;
}
else
{
CreateKey.GetPublicKey();
return true;
}
}
catch
{
return false;
} }
#endregion
}
} 第三步读取公钥和密钥 第四步对加密数据的封装 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography; namespace RSA
{
public static class SRSA
{
#region RSADeCrtypto
/// <summary>
/// 解密数据
/// </summary>
/// <param name="DataToDeCrypto">要解密的数据</param>
/// <param name="RSAKeyInfo"></param>
/// <param name="DoOAEPPadding"></param>
/// <returns></returns>
static public byte[] RSADeCrtypto(byte[] DataToDeCrypto, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
// System.Security.Cryptography.RSA 的参数。
RSA.ImportParameters(RSAKeyInfo);
//
// 参数:
//
// 要解密的数据。
//
//
// 如果为 true,则使用 OAEP 填充(仅在运行 Microsoft Windows XP 或更高版本的计算机上可用)执行直接的 System.Security.Cryptography.RSA
// 解密;否则,如果为 false,则使用 PKCS#1 1.5 版填充。
return RSA.Decrypt(DataToDeCrypto, DoOAEPPadding);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
#endregion #region RSAEnCrypto
/// <summary>
/// 加密数据
/// </summary>
/// <param name="DataToEnCrypto"></param>
/// <param name="RSAKeyInfo"></param>
/// <param name="DoOAEPPadding"></param>
/// <returns></returns>
static public byte[] RSAEnCrypto(byte[] DataToEnCrypto, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(RSAKeyInfo);
return RSA.Encrypt(DataToEnCrypto, DoOAEPPadding); }
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
#endregion #region Decrypt
/// <summary>
/// 解密数据
/// </summary>
/// <param name="base64code">传入加密数据</param>
/// <returns>返回解密数据</returns>
static public string Decrypt(string base64code)
{
try
{
UnicodeEncoding ByteConverter = new UnicodeEncoding(); RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(ReadKey.privateKey); byte[] encryptedData;
byte[] decryptedData; encryptedData = Convert.FromBase64String(base64code); decryptedData = RSADeCrtypto(encryptedData, RSA.ExportParameters(true), false);
return ByteConverter.GetString(decryptedData);
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
} }
#endregion #region Encrypt
/// <summary>
/// 加密数据
/// </summary>
/// <param name="toEncryptString">要解密的数据</param>
/// <returns></returns>
static public string Encrypt(string toEncryptString)
{
try
{
UnicodeEncoding ByteConverter = new UnicodeEncoding(); byte[] encrypteData;
byte[] decrypteData;
decrypteData = ByteConverter.GetBytes(toEncryptString); RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(ReadKey.privateKey);
encrypteData = RSAEnCrypto(decrypteData, RSA.ExportParameters(false), false); return Convert.ToBase64String(encrypteData);
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
}
}
#endregion }
} 演示 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using System.Security.Cryptography; namespace RSA
{
class Program
{
static void Main(string[] args)
{
//判断是否含有私钥,如果没有创建
if (ContainsKey.Create())
{
Console.WriteLine("*********请输入输入要加密的数据************");
string encryptData= Console.ReadLine();
Console.WriteLine("加密后的数据:{0}", SRSA.Encrypt(encryptData));
Console.WriteLine("解密后的数据:{0}", SRSA.Decrypt(SRSA.Encrypt(encryptData)));
Console.ReadLine();
}
}
}
}
C# RSA数据加密的更多相关文章
- Windows phone应用开发[19]-RSA数据加密
在这个系列的第十六章节中Windows phone应用开发[16]-数据加密 中曾详细讲解过windows phone 常用的MD5,HMAC_MD5,DES,TripleDES[3DES] 数据加密 ...
- RSA 数据加密和数字签名算法
PKCS8EncodedKeySpec pkcs8KeySpec = KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Pr ...
- RSA 签名、验证、加密、解密帮助类
import java.io.IOException; import java.security.InvalidKeyException; import java.security.KeyFactor ...
- 无线网卡加密方式wep wpa/wpa2 介绍
常见无线热点的配置选项:无线名称路由器的无线(Wi-Fi)名称.无线密码无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码为8-63个字符,最好是数字.字母.符号的组合.信 ...
- Aircrack-ng无线审计工具破解无线密码
Aircrack-ng工具 Aircrack-ng是一个与802.11标准的无线网络分析的安全软件,主要功能有网络探测.数据包嗅探捕获.WEP和WPA/WPA2-PSK破解.Aircrack可以工作在 ...
- Android数据加密之Rsa加密
前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...
- 使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...
- [转]使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...
- 数据加密--详解 RSA加密算法 原理与实现
RSA算法简介 RSA是最流行的非对称加密算法之一.也被称为公钥加密.它是由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adlema ...
随机推荐
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和 ...
- 玩转Android Camera开发(四):预览界面四周暗中间亮,仅仅拍摄矩形区域图片(附完整源代码)
杂家前文曾写过一篇关于仅仅拍摄特定区域图片的demo.仅仅是比較简陋.在坐标的换算上不是非常严谨,并且没有完毕预览界面四周暗中间亮的效果,深以为憾.今天把这个补齐了. 在上代码之前首先交代下,这里面存 ...
- 11个强大的 Visual Studio 调试技能
简介 调试是软件开辟周期中很首要的一项目组.它具有挑衅性,同时也很让人困惑和懊恼.总的来说,对于稍大一点的法度,调试是不成避免的.比来几年,调试对象的成长让很多调试任务变的越来越简单和省时. 这篇文章 ...
- spring mvc 图片上传,图片压缩、跨域解决、 按天生成文件夹 ,删除,限制为图片代码等相关配置
spring mvc 图片上传,跨域解决 按天生成文件夹 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ ...
- jquery实现下拉联动
很多项目用到这个功能,虽然写了不下5次以上了,一直没做过记录,记录一下,下次直接拷贝了,免得还得要重复写浪费时间. 先上HTML代码: 品牌: <select class="sa&qu ...
- easyui panel自适应问题
项目中要用到easyui,使用也有几年时间了,刚开始使用还不错,毕竟只是简单的增删改查数据,不过到后面越来越觉得easyui不如extjs了,好多复杂一点的问题,easyui表现就力不从心了,题外话就 ...
- 微信小程序:酒店订房之时间选择器 picker
下单页面,选择开始日期和结束日期,不废话,直接代码: 1.wxml: <picker mode="date" value="{{date1}}" star ...
- 在linux下安装并使用websocket
前言 首先,对websocket要有一个简要的了解与认识 websocket是HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议. 它基于TCP传输协议,并复用HTTP的握 ...
- HighCharts: 设置时间图x轴的宽度
这个x轴宽度的设置整了好久,被老板催的要死 highcharts的api文档很难找,找了半天也没找到,网上资料少,说的试了下,也没有,我用的图里api文档里没有介绍,这个属性不知道的话,根本不好找.为 ...
- iOS - PairProgramming 结对编程
1.PairProgramming 结对编程(Pair-Programming)可能是近年来最为流行的编程方式.所谓结对编程,也就是两个人写一个程序,其中,一个人叫 Driver,另一个人叫 Obse ...