第一步产生密钥类 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数据加密的更多相关文章

  1. Windows phone应用开发[19]-RSA数据加密

    在这个系列的第十六章节中Windows phone应用开发[16]-数据加密 中曾详细讲解过windows phone 常用的MD5,HMAC_MD5,DES,TripleDES[3DES] 数据加密 ...

  2. RSA 数据加密和数字签名算法

    PKCS8EncodedKeySpec pkcs8KeySpec = KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Pr ...

  3. RSA 签名、验证、加密、解密帮助类

    import java.io.IOException; import java.security.InvalidKeyException; import java.security.KeyFactor ...

  4. 无线网卡加密方式wep wpa/wpa2 介绍

    常见无线热点的配置选项:无线名称路由器的无线(Wi-Fi)名称.无线密码无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码为8-63个字符,最好是数字.字母.符号的组合.信 ...

  5. Aircrack-ng无线审计工具破解无线密码

    Aircrack-ng工具 Aircrack-ng是一个与802.11标准的无线网络分析的安全软件,主要功能有网络探测.数据包嗅探捕获.WEP和WPA/WPA2-PSK破解.Aircrack可以工作在 ...

  6. Android数据加密之Rsa加密

    前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...

  7. 使用openssl库实现RSA、AES数据加密

         openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...

  8. [转]使用openssl库实现RSA、AES数据加密

    openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...

  9. 数据加密--详解 RSA加密算法 原理与实现

    RSA算法简介 RSA是最流行的非对称加密算法之一.也被称为公钥加密.它是由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adlema ...

随机推荐

  1. Linux软件安装方法

    常用的两种软件安装方法: 1.RPM软件安装 rpm -qi 软件名 查询 rpm -ivh *.rpm 安装 rpm -e 软件名 卸载 系统自带的一些rpm包在系统镜像的Server文件夹里,需要 ...

  2. 算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答

     目录 1 凑算式 2 方格填数 3 四平方和   1 凑算式 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A ...

  3. 用Python读取大文件

    通常我们在读取文件的时候,会用到read(), readline(), readlines(). 通常可能会有这样的用法: def test1(): with open("/tmp/test ...

  4. 关于LoadRunner的迭代

    通过用lr做负载压力测试过程发现,如果设定不同的action迭代次数,每次得出的结果是不同的,曲线的表现形式也是不同的.这点就使我们会感觉困惑,为什么要设置action的迭代次数?以及对于不同的应用系 ...

  5. FCT需求分析

    1. 系统组成 系统从硬件角度看是由芯片.电源,时钟,总线组成, 当中总线分为控制总线和数据总线. 芯片是单个的硬件单元,可实现多种功能.有些功能有性能需求,在计算机系统中大部分功能都须要软件配合. ...

  6. C++知识整理(进制)

    ++输出二进制.十进制.八进制和十六进制总结 分类: C++ 2013-01-14 02:26 592人阅读 评论(0) 收藏 举报 在C++中,默认状态下,数据按十进制输入输出.如果要求按八进制或十 ...

  7. 主流ETL(Extract-Transform-Load)工具选型,Kettle Spoon、Datastage、Powercenter介绍

    参考:三大主流ETL工具选型 ETL工具 Kettle Spoon 开源ETL工具,所以免费,用java开发的. Ascential公司的Datastage(在2005年被IBM收购现在是 IBM 的 ...

  8. Linux 常用脚本

    Linux 常用脚本   修改表列属性   sql可任意修改,若数据库正好在执行机器上,可去掉ip地址 echo 为输出   #!/bin/shfor((i=0;i<256;i++));do   ...

  9. Html5 Geolocation获取地理位置信息(转)

    Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置.基于此特性可以开发基于位置的服务应用.在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用. ...

  10. ios 中的tintColor

    在iOS 7后,UIView新增加了一个tintColor属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构.它主要是应用到诸如app图标.导航栏.按钮等一 ...