RSA算法C#.net源代码,尽量详细,不要用C#中默认的RSA算法,谢谢
解决方案 »
- (50分)跪求:resx資源文檔編輯器
- 读取数据无法读取出来。
- 在一台不与外界连接的物理主机中,如何在虚拟机中安装一个Microsoft Loopback Adapter来与物理主机中的Microsoft Loopback Adapter组成一个单独的网络,以实现虚拟机访问物理主机的数据库。
- 提取和更新问题
- 如何界面初始化就读取文件内容
- String Resource Generator修正版 适应Visaul Studio.Net 2005
- 如何调用其他窗体的公共非静态方法?
- 为什么我不能删除oracle中的数据?高手们帮帮忙!
- 接收短信程序,需要不停的扫描收件箱,然后找到需要的信息更新应用数据,这样的程序如何写,最好有个程序框架
- 窗体句柄问题
- 关于用C#代码实现数据库备份的问题
- C#怎样在WEB开发得到子窗口的值?
这个POST一个网上找到的。
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Xml;/**
RSA算法工具
*/
namespace RSAUtil{ public class RSAHandler{
public RSACryptoServiceProvider CreateRSAProvider(String privateKeyFile){
RSAParameters parameters1;
parameters1 = new RSAParameters();
StreamReader reader1 = new StreamReader(privateKeyFile);
XmlDocument document1 = new XmlDocument();
document1.LoadXml(reader1.ReadToEnd());
XmlElement element1 = (XmlElement) document1.SelectSingleNode("root");
parameters1.Modulus = ReadChild(element1, "Modulus");
parameters1.Exponent = ReadChild(element1, "Exponent");
parameters1.D = ReadChild(element1, "D");
parameters1.DP = ReadChild(element1, "DP");
parameters1.DQ = ReadChild(element1, "DQ");
parameters1.P = ReadChild(element1, "P");
parameters1.Q = ReadChild(element1, "Q");
parameters1.InverseQ = ReadChild(element1, "InverseQ");
CspParameters parameters2 = new CspParameters();
parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
provider1.ImportParameters(parameters1);
return provider1;
} public RSACryptoServiceProvider CreateRSAEncryptProvider(String publicKeyFile){
RSAParameters parameters1;
parameters1 = new RSAParameters();
StreamReader reader1 = new StreamReader(publicKeyFile);
XmlDocument document1 = new XmlDocument();
document1.LoadXml(reader1.ReadToEnd());
XmlElement element1 = (XmlElement) document1.SelectSingleNode("root");
parameters1.Modulus = ReadChild(element1, "Modulus");
parameters1.Exponent = ReadChild(element1, "Exponent");
CspParameters parameters2 = new CspParameters();
parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
provider1.ImportParameters(parameters1);
return provider1;
} public RSAPKCS1SignatureDeformatter CreateRSADeformatter(String publicKeyFile)
{
RSAParameters parameters1;
parameters1 = new RSAParameters();
StreamReader reader1 = new StreamReader(publicKeyFile);
XmlDocument document1 = new XmlDocument();
document1.LoadXml(reader1.ReadToEnd());
XmlElement element1 = (XmlElement) document1.SelectSingleNode("root");
parameters1.Modulus = ReadChild(element1, "Modulus");
parameters1.Exponent = ReadChild(element1, "Exponent");
CspParameters parameters2 = new CspParameters();
parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
provider1.ImportParameters(parameters1);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(provider1);
deformatter.SetHashAlgorithm("SHA1");
return deformatter;
} public RSAPKCS1SignatureFormatter CreateRSAFormatter(String privateKeyFile)
{
RSAParameters parameters1;
parameters1 = new RSAParameters();
StreamReader reader1 = new StreamReader(privateKeyFile);
XmlDocument document1 = new XmlDocument();
document1.LoadXml(reader1.ReadToEnd());
XmlElement element1 = (XmlElement) document1.SelectSingleNode("root");
parameters1.Modulus = ReadChild(element1, "Modulus");
parameters1.Exponent = ReadChild(element1, "Exponent");
parameters1.D = ReadChild(element1, "D");
parameters1.DP = ReadChild(element1, "DP");
parameters1.DQ = ReadChild(element1, "DQ");
parameters1.P = ReadChild(element1, "P");
parameters1.Q = ReadChild(element1, "Q");
parameters1.InverseQ = ReadChild(element1, "InverseQ");
CspParameters parameters2 = new CspParameters();
parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
provider1.ImportParameters(parameters1);
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(provider1);
formatter.SetHashAlgorithm("SHA1");
return formatter;
}
public byte[] GetHashData(byte[] data){
HashAlgorithm algorithm1 = HashAlgorithm.Create("SHA1");
return algorithm1.ComputeHash(data);
} public byte[] GetHashData(Stream data){
HashAlgorithm algorithm1 = HashAlgorithm.Create("SHA1");
return algorithm1.ComputeHash(data);
} private byte[] ReadChild(XmlElement parent, string name)
{
XmlElement element1 = (XmlElement) parent.SelectSingleNode(name);
return Convert.FromBase64String(element1.InnerText);
}
}
}
http://www.cnblogs.com/lyzhong/articles/39613.aspx
using System.Security.Cryptography;
using System.IO;
using System.Text;
using System.Web.Security;namespace Paladin.Common
{
/// <summary>
/// Security 的摘要说明。
/// 对称加密算法 : DES / TripleDES / RC2 / Rijndael
/// 非对称加密算法 : DSA / RSA
/// Base64 算法
/// </summary>
public class Cryptography
{
public Cryptography()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
// DES 的加密方法 。
// 私钥加密 / 对称算法 。
public static string Encrypt_Des( string cleanString )
{
//.NET 框架提供的对称加密类需要一个密钥和一个新的 IV 来加密和解密数据。
//每当使用默认的构造函数创建其中一个托管对称加密类的新实例时,就会自动创建新的密钥和 IV
//DES 使用 64 位密钥、64 位块来加密和解密数据。每个数据块迭代 16 次以生成加密文本。
//初始化向量(IV) 用来第一次对数据块进行加密 。
byte[] KEY_64 = {42, 16, 93, 156, 78, 4, 218, 32}; // 指定的 Key
byte[] IV_64 = {55, 103, 246, 79, 36, 99, 167, 3}; // 初始化向量(IV)
DESCryptoServiceProvider provider = new DESCryptoServiceProvider ( ) ;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream( ms , provider.CreateEncryptor( KEY_64,IV_64 ) , CryptoStreamMode.Write ) ;
StreamWriter sw = new StreamWriter( cs ) ;
sw.Write( cleanString ) ;
sw.Flush( ) ;
cs.FlushFinalBlock( ) ;
ms.Flush( ) ;
return Convert.ToBase64String( ms.GetBuffer( ) , 0 , int.Parse( ( ms.Length.ToString ( ) ) ) ) ;
} // DES 的解密方法 。
// 私钥加密 / 对称算法 。
public static string Decrypt_Des( string encryptedString )
{
byte[] KEY_64 = {42, 16, 93, 156, 78, 4, 218, 32};
byte[] IV_64 = {55, 103, 246, 79, 36, 99, 167, 3};
DESCryptoServiceProvider provider = new DESCryptoServiceProvider ( ) ;
byte[] buffer = Convert.FromBase64String( encryptedString ) ;
MemoryStream ms = new MemoryStream ( buffer ) ;
CryptoStream cs = new CryptoStream( ms,provider.CreateDecryptor( KEY_64,IV_64 ) , CryptoStreamMode.Read ) ;
StreamReader sr = new StreamReader( cs ) ;
return sr.ReadToEnd ( ) ; } // hash 加密
public static string Encrypt_Hash(string cleanString)
{
Byte[] clearBytes = new UnicodeEncoding().GetBytes(cleanString);
Byte[] hashedBytes = ((HashAlgorithm) CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);
return BitConverter.ToString(hashedBytes);
} // sha1 的方式加密密码
public static String Encrypt_Sha1( String oriPassWrd )
{
String returnstr=""; returnstr = FormsAuthentication.HashPasswordForStoringInConfigFile( oriPassWrd , "sha1" ); return returnstr; } // DSA 的数字签名
// RSA 类似,不过RSA比DSA慢得多,但比DSA安全。RSA可以选择关键字的大小,越大越安全
public static byte[] DsaCrypto_SignData ( string content , ref string dsaXmlString )
{
//先要将字符串转换为字节数组,这与编码有关。
// String content = "this is a test.";
byte[] bytes = Encoding.ASCII.GetBytes( content );
//选择签名方式,有RSA和DSA
DSACryptoServiceProvider dsac = new DSACryptoServiceProvider();
byte[] sign = dsac.SignData( bytes );
//当前 Dsa 对象的 xml 表示字符串 。
dsaXmlString = dsac.ToXmlString( false ) ;
//sign便是出来的签名结果。
return sign ;
} // DSA 的数字签名认证
public static void DsaCrypto_VerifyData (string content , byte[] sign , string dsaXmlString )
{
byte[] bytes = Encoding.ASCII.GetBytes( content );
//下面是认证了
// DSACryptoServiceProvider dsac2 = new DSACryptoServiceProvider();
// dsac2.FromXmlString( dsac.ToXmlString( false ) );
// bool _verify = dsac2.VerifyData( bytes, sign );
DSACryptoServiceProvider dsac = new DSACryptoServiceProvider();
dsac.FromXmlString( dsaXmlString );
bool _verify = dsac.VerifyData( bytes, sign );
if ( _verify )
{
common.setMessage ( "通过" ) ;
}
else
{
common.setMessage ( "不能通过" ) ;
}
}
}//class
}