第一步产生密钥类 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. wepy - 与原生有什么不同(request)

    关于request导入,清先查看这篇文档了解大概 缺陷: wx.request一个页面最多支持10个wx.request,况且不能保证请求先后顺序  对于wepy来说,使用了ES6 的Promise以 ...

  2. Java从零开始学十九(异常)

    一.什么是异常 从字面上讲,就是不正常的现实就是异常. 程序中的异常也是要在程序运行中才会偶尔发生.如果程序还没有运行,编译就报错,这种不叫异常,这种叫编译错误,通常是语法上的错误 二.java中异常 ...

  3. HDOJ 4686 Arc of Dream 矩阵高速幂

    矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/ ...

  4. 转:StdRegProv类所属方法的使用

    在root\default命名空间中的StdRegProv类(标准注册表提供程序)提供了下面16种方法,我们将陆续介绍这些方法的使用规则,并给出分别用WBscript和Powershell编写的例子. ...

  5. 解决vsftpd乱码

    不管是中文环境还是英文环境,需要改的地方如下: /etc/sysconfig/i18n 其内容改为: LANG="zh_CN.GB2312"SYSFONT="latarc ...

  6. gdb 读取elf

    在make file中找到ld,然后将其换成 gdb, 如本例中LINKER = /usr/cygnus/xscale-020523/H-sparc-sun-solaris2.5/bin/xscale ...

  7. Web Service-WSDL详解

    WSDL指网络服务描述语言 (Web Services Description Language), 是一种用XML编写的文档, 用于描述Web Service和函数.参数以及返回值等; 文档内规定了 ...

  8. Mac新建文件夹、txt文件、其他格式文件

    Mac新建txt,正好有人问我,我就把我自己的方法记录一下: 先cd到你指定的文件路径下: 新建文件夹: mkdir test 新建txt touch test.txt 新建无后缀格式文件 touch ...

  9. Hibernate学习备忘

    1.关于Hibernate异常: org.hibernate.service.jndi.JndiException: Error parsing JNDI name   刚接触Hibernate,调试 ...

  10. 【LeetCode】124. Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...