namespace Microshaoft
{
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
class Class1
{
static void Main()
{
//RSA
UTF8Encoding e = new UTF8Encoding();
byte[] data = e.GetBytes("测试@microshaoft.com");
byte[] encryptedData;
//byte[] decryptedData;
RSACryptoServiceProvider x = new RSACryptoServiceProvider();
string privateKey = x.ToXmlString(true);
Console.WriteLine("RSA Private Key: {0}", privateKey);
string publicKey = x.ToXmlString(false);
Console.WriteLine("RSA Public Key: {0}", publicKey);
//公钥加密
encryptedData = CryptoHelper.RSAEncrypt(data, publicKey, false);
//私钥解密
data = CryptoHelper.RSADecrypt(encryptedData, privateKey, false);
Console.WriteLine("RSA Decrypted plaintext: {0}", e.GetString(data));
//私钥签名
byte[] signature = CryptoHelper.RSASignSHA1(data, privateKey);
//公钥验签
Console.WriteLine(CryptoHelper.RSAVerifySHA1(data, publicKey, signature));
//TripleDES
string key = "000111222333444555666777888999aaabbbcccdddeeefff";//48
key = "012345678901234567890123456789012345678901234567";
key = "abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdef";
key = "0123456789abcdef01111111111111111111111111111110";
string iv = "0123456789abcdef";//16
iv = "0000000000000000";
data = e.GetBytes("测试@microshaoft.com");
data = CryptoHelper.TripleDESEncrypt
(
data,
CryptoHelper.HexStringToBytesArray(key),
CryptoHelper.HexStringToBytesArray(iv)
);
data = CryptoHelper.TripleDESDecrypt
(
data,
CryptoHelper.HexStringToBytesArray(key),
CryptoHelper.HexStringToBytesArray(iv)
);
Console.WriteLine("3DES Decrypted plaintext: {0}", e.GetString(data));
Console.WriteLine(Environment.Version.ToString());
}
}
public class CryptoHelper
{
public static byte[] RSASignSHA1
(
byte[] data
, string privateKey
)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
return RSASignSHA1
(
provider
, data
, privateKey
);
}
public static byte[] RSASignSHA1
(
RSACryptoServiceProvider provider
, byte[] data
, string privateKey
)
{
provider.FromXmlString(privateKey);
return provider.SignHash
(
ComputeSHA1(data)
, "SHA1"
);
}
public static bool RSAVerifySHA1
(
byte[] data
, string publicKey
, byte[] signature
)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
return RSAVerifySHA1
(
provider
, data
, publicKey
, signature
);
}
public static bool RSAVerifySHA1
(
RSACryptoServiceProvider provider
, byte[] data
, string publicKey
, byte[] signature
)
{
provider.FromXmlString(publicKey);
return provider.VerifyHash
(
ComputeSHA1(data)
, "SHA1"
, signature
);
}
public static byte[] RSASignMD5
(
byte[] data
, string privateKey
)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
return RSASignMD5
(
provider
, data
, privateKey
);
}
public static byte[] RSASignMD5
(
RSACryptoServiceProvider provider
, byte[] data
, string privateKey
)
{
provider.FromXmlString(privateKey);
return provider.SignHash
(
ComputeMD5(data)
, "MD5"
);
}
public static bool RSAVerifyMD5
(
byte[] data
, string publicKey
, byte[] signature
)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
return RSAVerifyMD5
(
provider
, data
, publicKey
, signature
);
}
public static bool RSAVerifyMD5
(
RSACryptoServiceProvider provider
, byte[] data
, string publicKey
, byte[] signature
)
{
provider.FromXmlString(publicKey);
return provider.VerifyHash
(
ComputeMD5(data)
, "MD5"
, signature
);
}
public static byte[] RSAEncrypt
(
byte[] data
, string publicKey
, bool DoOAEPPadding
)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
return RSAEncrypt
(
provider,
data,
publicKey,
DoOAEPPadding
);
}
public static byte[] RSAEncrypt
(
RSACryptoServiceProvider provider
, byte[] data
, string publicKey
, bool DoOAEPPadding
)
{
provider.FromXmlString(publicKey);
return provider.Encrypt(data, DoOAEPPadding);
}
public static byte[] RSADecrypt
(
byte[] data
, string privateKey
, bool DoOAEPPadding
)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
return RSADecrypt
(
provider,
data,
privateKey,
DoOAEPPadding
);
}
public static byte[] RSADecrypt
(
RSACryptoServiceProvider provider
, byte[] data
, string privateKey
, bool DoOAEPPadding
)
{
provider.FromXmlString(privateKey);
return provider.Decrypt(data, DoOAEPPadding);
}
public static byte[] TripleDESDecrypt
(
byte[] data
, byte[] Key
, byte[] IV
)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = Key;
des.IV = IV;
return des.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
}
public static byte[] TripleDESDecrypt
(
string text
, string HexStringKey
, string HexStringIV
)
{
return TripleDESDecrypt
(
HexStringToBytesArray(text)
, HexStringToBytesArray(HexStringKey)
, HexStringToBytesArray(HexStringIV)
);
}
public static byte[] TripleDESDecrypt
(
string text
, byte[] Key
, byte[] IV
)
{
return TripleDESDecrypt
(
HexStringToBytesArray(text)
, Key
, IV
);
}
public static string TripleDESDecrypt
(
string text
, string HexStringKey
, string HexStringIV
, Encoding e //原文的encoding
)
{
return e.GetString
(
TripleDESDecrypt
(
text
, HexStringKey
, HexStringIV
)
);
}
public static string TripleDESDecrypt
(
string text
, byte[] Key
, byte[] IV
, Encoding e //原文的encoding
)
{
return e.GetString
(
TripleDESDecrypt
(
text
, Key
, IV
)
);
}
public static string GenerateTripleDESHexStringKey()
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.GenerateKey();
return BytesArrayToHexString(des.Key);
}
public static string GenerateTripleDESHexStringIV()
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.GenerateIV();
return BytesArrayToHexString(des.IV);
}
public static byte[] TripleDESEncrypt
(
byte[] data
, byte[] Key
, byte[] IV
)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = Key;
des.IV = IV;
return des.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);
}
public static byte[] TripleDESEncrypt
(
string text
, Encoding e
, byte[] Key
, byte[] IV
)
{
return TripleDESEncrypt
(
e.GetBytes(text)
, Key
, IV
);
}
public static byte[] TripleDESEncrypt
(
string text
, Encoding e
, string HexStringKey
, string HexStringIV
)
{
return TripleDESEncrypt
(
text
, e
, HexStringToBytesArray(HexStringKey)
, HexStringToBytesArray(HexStringIV)
);
}
public static byte[] ComputeSHA1(byte[] data)
{
return new SHA1CryptoServiceProvider().ComputeHash(data);
}
public static byte[] ComputeSHA1(string text, Encoding e)
{
return ComputeSHA1(e.GetBytes(text));
}
public static byte[] ComputeSHA1(string text)
{
return ComputeSHA1(text, Encoding.UTF8);
}
public static byte[] ComputeSHA1(Stream stream)
{
return new SHA1CryptoServiceProvider().ComputeHash(stream);
}
public static byte[] ComputeMD5(byte[] data)
{
return new MD5CryptoServiceProvider().ComputeHash(data, 0, data.Length);
}
public static byte[] ComputeMD5(string text, Encoding e)
{
return ComputeMD5(e.GetBytes(text));
}
public static byte[] ComputeMD5(string text)
{
return ComputeMD5(text, Encoding.UTF8);
}
public static byte[] ComputeMD5(Stream stream)
{
return new MD5CryptoServiceProvider().ComputeHash(stream);
}
public static string BytesArrayToHexString(byte[] data)
{
return BitConverter.ToString(data).Replace("-", "");
}
public static byte[] HexStringToBytesArray(string text)
{
text = text.Replace(" ", "");
int l = text.Length;
byte[] buffer = new byte[l / 2];
for (int i = 0; i < l; i += 2)
{
buffer[i / 2] = Convert.ToByte(text.Substring(i, 2), 16);
}
return buffer;
}
}
}