C# 常见加密解密类
标签:lock 容器 security 函数 get 哈希函数 stat summary 密文
常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等
不可逆:常见的MD5,SHAD等
常见的加密方式封装到一个Password类中
public class Password
{
///
/// 此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串
/// 官网案例改编
///
///
///
public static string Get32MD5One(string source)
{
using (System.Security.Cryptography.MD5 md5Hash = System.Security.Cryptography.MD5.Create())
{
byte[] data = md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source));
System.Text.StringBuilder sBuilder = new System.Text.StringBuilder();
for (int i = 0; i
/// 获取16位md5加密
///
///
///
public static string Get16MD5One(string source)
{
using (System.Security.Cryptography.MD5 md5Hash = System.Security.Cryptography.MD5.Create())
{
byte[] data = md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source));
//转换成字符串,并取9到25位
string sBuilder = BitConverter.ToString(data, 4, 8);
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉
sBuilder = sBuilder.Replace("-", "");
return sBuilder.ToString().ToUpper();
}
}
////
///
/// 需要加密的明文
/// 返回32位加密结果,该结果取32位加密结果的第9位到25位
public static string Get32MD5Two(string source)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
//获取密文字节数组
byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source));
//转换成字符串,32位
string strResult = BitConverter.ToString(bytResult);
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉
strResult = strResult.Replace("-", "");
return strResult.ToUpper();
}
////
///
/// 需要加密的明文
/// 返回16位加密结果,该结果取32位加密结果的第9位到25位
public static string Get16MD5Two(string source)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
//获取密文字节数组
byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source));
//转换成字符串,并取9到25位
string strResult = BitConverter.ToString(bytResult, 4, 8);
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉
strResult = strResult.Replace("-", "");
return strResult.ToUpper();
}
//SHA为不可逆加密方式
public static string SHA1Encrypt(string normalTxt)
{
var bytes = System.Text.Encoding.Default.GetBytes(normalTxt);
var SHA = new System.Security.Cryptography.SHA1CryptoServiceProvider();
var encryptbytes = SHA.ComputeHash(bytes);
return Convert.ToBase64String(encryptbytes);
}
public static string SHA256Encrypt(string normalTxt)
{
var bytes = System.Text.Encoding.Default.GetBytes(normalTxt);
var SHA256 = new System.Security.Cryptography.SHA256CryptoServiceProvider();
var encryptbytes = SHA256.ComputeHash(bytes);
return Convert.ToBase64String(encryptbytes);
}
public static string SHA384Encrypt(string normalTxt)
{
var bytes = System.Text.Encoding.Default.GetBytes(normalTxt);
var SHA384 = new System.Security.Cryptography.SHA384CryptoServiceProvider();
var encryptbytes = SHA384.ComputeHash(bytes);
return Convert.ToBase64String(encryptbytes);
}
public string SHA512Encrypt(string normalTxt)
{
var bytes = System.Text.Encoding.Default.GetBytes(normalTxt);
var SHA512 = new System.Security.Cryptography.SHA512CryptoServiceProvider();
var encryptbytes = SHA512.ComputeHash(bytes);
return Convert.ToBase64String(encryptbytes);
}
///
/// 将base64格式,转换utf8
///
/// 解密内容
///
public static string Base64Decode(string content)
{
byte[] bytes = Convert.FromBase64String(content);
return System.Text.Encoding.UTF8.GetString(bytes);
}
///
/// DES加密数据
///
///
///
///
public static string DESEncryption(string Text, string sKey=null)
{
sKey = sKey ?? "zhiqiang";
try
{
System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider();
byte[] inputByteArray;
inputByteArray = System.Text.Encoding.Default.GetBytes(Text);
string md5SKey = Get32MD5One(sKey).Substring(0, 8);
des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(md5SKey);
des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(md5SKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
System.Text.StringBuilder ret = new System.Text.StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}catch { return "error"; }
}
///
/// DES解密数据
///
///
///
///
public static string DESDecrypt(string Text, string sKey=null)
{
sKey = sKey ?? "zhiqiang";
try
{
System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider();
int len;
len = Text.Length / 2;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = 0; x
/// RSA加密数据
///
///
///
///
public static string RSAEncryption(string express, string KeyContainerName = null)
{
System.Security.Cryptography.CspParameters param = new System.Security.Cryptography.CspParameters();
param.KeyContainerName = KeyContainerName ?? "zhiqiang"; //密匙容器的名称,保持加密解密一致才能解密成功
using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(param))
{
byte[] plaindata = System.Text.Encoding.Default.GetBytes(express);//将要加密的字符串转换为字节数组
byte[] encryptdata = rsa.Encrypt(plaindata, false);//将加密后的字节数据转换为新的加密字节数组
return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为字符串
}
}
///
/// RSA解密数据
///
///
///
///
public static string RSADecrypt(string ciphertext, string KeyContainerName = null)
{
System.Security.Cryptography.CspParameters param = new System.Security.Cryptography.CspParameters();
param.KeyContainerName = KeyContainerName ?? "zhiqiang";
using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(param))
{
byte[] encryptdata = Convert.FromBase64String(ciphertext);
byte[] decryptdata = rsa.Decrypt(encryptdata, false);
return System.Text.Encoding.Default.GetString(decryptdata);
}
}
}
C# 常见加密解密类
标签:lock 容器 security 函数 get 哈希函数 stat summary 密文
原文地址:http://blog.51cto.com/13717297/2139360
评论