354 lines
11 KiB
C#
354 lines
11 KiB
C#
|
|
using System;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Security.Cryptography;
|
|||
|
|
namespace ZWL.Common.DEncrypt
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// RSA<53><41><EFBFBD>ܽ<EFBFBD><DCBD>ܼ<EFBFBD>RSAǩ<41><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
|
|||
|
|
/// </summary>
|
|||
|
|
public class RSACryption
|
|||
|
|
{
|
|||
|
|
public RSACryption()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#region RSA <EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#region RSA <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// RSA <20><><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>˽Կ <20><EFBFBD>Կ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="xmlKeys"></param>
|
|||
|
|
/// <param name="xmlPublicKey"></param>
|
|||
|
|
public void RSAKey(out string xmlKeys,out string xmlPublicKey)
|
|||
|
|
{
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
|
|||
|
|
xmlKeys=rsa.ToXmlString(true);
|
|||
|
|
xmlPublicKey = rsa.ToXmlString(false);
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region RSA<EFBFBD>ļ<EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//##############################################################################
|
|||
|
|
//RSA <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
|||
|
|
//˵<><CBB5>KEY<45><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XML<4D><4C><EFBFBD><EFBFBD>ʽ,<2C><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ˵<D2AA><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC>ܷ<EFBFBD>ʽ<EFBFBD><CABD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ƶģ<C6B5><C4A3><EFBFBD>
|
|||
|
|
//##############################################################################
|
|||
|
|
|
|||
|
|
//RSA<53>ļ<EFBFBD><C4BC>ܺ<EFBFBD><DCBA><EFBFBD> string
|
|||
|
|
public string RSAEncrypt(string xmlPublicKey,string m_strEncryptString )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] PlainTextBArray;
|
|||
|
|
byte[] CypherTextBArray;
|
|||
|
|
string Result;
|
|||
|
|
RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
|
|||
|
|
rsa.FromXmlString(xmlPublicKey);
|
|||
|
|
PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);
|
|||
|
|
CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
|
|||
|
|
Result=Convert.ToBase64String(CypherTextBArray);
|
|||
|
|
return Result;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//RSA<53>ļ<EFBFBD><C4BC>ܺ<EFBFBD><DCBA><EFBFBD> byte[]
|
|||
|
|
public string RSAEncrypt(string xmlPublicKey,byte[] EncryptString )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] CypherTextBArray;
|
|||
|
|
string Result;
|
|||
|
|
RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
|
|||
|
|
rsa.FromXmlString(xmlPublicKey);
|
|||
|
|
CypherTextBArray = rsa.Encrypt(EncryptString, false);
|
|||
|
|
Result=Convert.ToBase64String(CypherTextBArray);
|
|||
|
|
return Result;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region RSA<EFBFBD>Ľ<EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//RSA<53>Ľ<EFBFBD><C4BD>ܺ<EFBFBD><DCBA><EFBFBD> string
|
|||
|
|
public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString )
|
|||
|
|
{
|
|||
|
|
byte[] PlainTextBArray;
|
|||
|
|
byte[] DypherTextBArray;
|
|||
|
|
string Result;
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
|
|||
|
|
rsa.FromXmlString(xmlPrivateKey);
|
|||
|
|
PlainTextBArray =Convert.FromBase64String(m_strDecryptString);
|
|||
|
|
DypherTextBArray=rsa.Decrypt(PlainTextBArray, false);
|
|||
|
|
Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
|
|||
|
|
return Result;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//RSA<53>Ľ<EFBFBD><C4BD>ܺ<EFBFBD><DCBA><EFBFBD> byte
|
|||
|
|
public string RSADecrypt(string xmlPrivateKey, byte[] DecryptString )
|
|||
|
|
{
|
|||
|
|
byte[] DypherTextBArray;
|
|||
|
|
string Result;
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
|
|||
|
|
rsa.FromXmlString(xmlPrivateKey);
|
|||
|
|
DypherTextBArray=rsa.Decrypt(DecryptString, false);
|
|||
|
|
Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
|
|||
|
|
return Result;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region RSA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD>ȡHash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><>ȡHash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public bool GetHash(string m_strSource, ref byte[] HashData)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Hash<73><68><EFBFBD><EFBFBD>
|
|||
|
|
byte[] Buffer;
|
|||
|
|
System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
|
|||
|
|
Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);
|
|||
|
|
HashData = MD5.ComputeHash(Buffer);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡHash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public bool GetHash(string m_strSource, ref string strHashData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Hash<73><68><EFBFBD><EFBFBD>
|
|||
|
|
byte[] Buffer;
|
|||
|
|
byte[] HashData;
|
|||
|
|
System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
|
|||
|
|
Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);
|
|||
|
|
HashData = MD5.ComputeHash(Buffer);
|
|||
|
|
|
|||
|
|
strHashData = Convert.ToBase64String(HashData);
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡHash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public bool GetHash(System.IO.FileStream objFile, ref byte[] HashData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD><C8A1>Hash<73><68><EFBFBD><EFBFBD>
|
|||
|
|
System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
|
|||
|
|
HashData = MD5.ComputeHash(objFile);
|
|||
|
|
objFile.Close();
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡHash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public bool GetHash(System.IO.FileStream objFile, ref string strHashData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD><C8A1>Hash<73><68><EFBFBD><EFBFBD>
|
|||
|
|
byte[] HashData;
|
|||
|
|
System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
|
|||
|
|
HashData = MD5.ComputeHash(objFile);
|
|||
|
|
objFile.Close();
|
|||
|
|
|
|||
|
|
strHashData = Convert.ToBase64String(HashData);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region RSAǩ<EFBFBD><EFBFBD>
|
|||
|
|
//RSAǩ<41><C7A9>
|
|||
|
|
public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref byte[] EncryptedSignatureData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPrivate);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>㷨ΪMD5
|
|||
|
|
RSAFormatter.SetHashAlgorithm("MD5");
|
|||
|
|
//ִ<><D6B4>ǩ<EFBFBD><C7A9>
|
|||
|
|
EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//RSAǩ<41><C7A9>
|
|||
|
|
public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref string m_strEncryptedSignatureData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] EncryptedSignatureData;
|
|||
|
|
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPrivate);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>㷨ΪMD5
|
|||
|
|
RSAFormatter.SetHashAlgorithm("MD5");
|
|||
|
|
//ִ<><D6B4>ǩ<EFBFBD><C7A9>
|
|||
|
|
EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
|
|||
|
|
|
|||
|
|
m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//RSAǩ<41><C7A9>
|
|||
|
|
public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref byte[] EncryptedSignatureData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] HashbyteSignature;
|
|||
|
|
|
|||
|
|
HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPrivate);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>㷨ΪMD5
|
|||
|
|
RSAFormatter.SetHashAlgorithm("MD5");
|
|||
|
|
//ִ<><D6B4>ǩ<EFBFBD><C7A9>
|
|||
|
|
EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//RSAǩ<41><C7A9>
|
|||
|
|
public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref string m_strEncryptedSignatureData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] HashbyteSignature;
|
|||
|
|
byte[] EncryptedSignatureData;
|
|||
|
|
|
|||
|
|
HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPrivate);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>㷨ΪMD5
|
|||
|
|
RSAFormatter.SetHashAlgorithm("MD5");
|
|||
|
|
//ִ<><D6B4>ǩ<EFBFBD><C7A9>
|
|||
|
|
EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
|
|||
|
|
|
|||
|
|
m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region RSA ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
|
|||
|
|
|
|||
|
|
public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, byte[] DeformatterData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPublic);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
|
|||
|
|
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ʱ<EFBFBD><CAB1>HASH<53>㷨ΪMD5
|
|||
|
|
RSADeformatter.SetHashAlgorithm("MD5");
|
|||
|
|
|
|||
|
|
if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, byte[] DeformatterData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] HashbyteDeformatter;
|
|||
|
|
|
|||
|
|
HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);
|
|||
|
|
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPublic);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
|
|||
|
|
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ʱ<EFBFBD><CAB1>HASH<53>㷨ΪMD5
|
|||
|
|
RSADeformatter.SetHashAlgorithm("MD5");
|
|||
|
|
|
|||
|
|
if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, string p_strDeformatterData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] DeformatterData;
|
|||
|
|
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPublic);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
|
|||
|
|
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ʱ<EFBFBD><CAB1>HASH<53>㷨ΪMD5
|
|||
|
|
RSADeformatter.SetHashAlgorithm("MD5");
|
|||
|
|
|
|||
|
|
DeformatterData =Convert.FromBase64String(p_strDeformatterData);
|
|||
|
|
|
|||
|
|
if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, string p_strDeformatterData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
byte[] DeformatterData;
|
|||
|
|
byte[] HashbyteDeformatter;
|
|||
|
|
|
|||
|
|
HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);
|
|||
|
|
System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
|
|||
|
|
|
|||
|
|
RSA.FromXmlString(p_strKeyPublic);
|
|||
|
|
System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
|
|||
|
|
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ʱ<EFBFBD><CAB1>HASH<53>㷨ΪMD5
|
|||
|
|
RSADeformatter.SetHashAlgorithm("MD5");
|
|||
|
|
|
|||
|
|
DeformatterData =Convert.FromBase64String(p_strDeformatterData);
|
|||
|
|
|
|||
|
|
if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|