C# 加密、解密 RSA、DES、Base64、MD5

#region RSA 加密解密
public static CspParameters param;
/// <summary>
/// 进行 RSA 加密
/// </summary>
/// <param name="sourceStr">源字符串</param>
/// <returns>加密后字符串</returns>
public static string RsaEncrypt(string sourceStr)
{
	param = new CspParameters();
	//密匙容器的名称,保持加密解密一致才能解密成功
	param.KeyContainerName = "Navis";
	using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
	{
		//将要加密的字符串转换成字节数组
		byte[] plaindata = Encoding.Default.GetBytes(sourceStr);
		//通过字节数组进行加密
		byte[] encryptdata = rsa.Encrypt(plaindata, false);
		//将加密后的字节数组转换成字符串
		return Convert.ToBase64String(encryptdata);
	}
}

/// <summary>
/// 通过RSA 加密方式进行解密
/// </summary>
/// <param name="codingStr">加密字符串</param>
/// <returns>解密后字符串</returns>
public static string RsaDesEncrypt(string codingStr)
{
	param = new CspParameters();
	param.KeyContainerName = "Navis";
	using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
	{
		byte[] encryptdata = Convert.FromBase64String(codingStr);
		byte[] decryptdata = rsa.Decrypt(encryptdata, false);
		return Encoding.Default.GetString(decryptdata);
	}
}
#endregion

#region DES加密解密
/// <summary>
/// DES加密
/// </summary>
/// <param name="data">加密数据</param>
/// <param name="key">8位字符的密钥字符串</param>
/// <param name="iv">8位字符的初始化向量字符串</param>
/// <returns></returns>
public static string DESEncrypt(string data, string key, string iv)
{
	byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
	byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);

	DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
	int i = cryptoProvider.KeySize;
	MemoryStream ms = new MemoryStream();
	CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);

	StreamWriter sw = new StreamWriter(cst);
	sw.Write(data);
	sw.Flush();
	cst.FlushFinalBlock();
	sw.Flush();
	return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}

/// <summary>
/// DES解密
/// </summary>
/// <param name="data">解密数据</param>
/// <param name="key">8位字符的密钥字符串(需要和加密时相同)</param>
/// <param name="iv">8位字符的初始化向量字符串(需要和加密时相同)</param>
/// <returns></returns>
public static string DESDecrypt(string data, string key, string iv)
{
	byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
	byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);

	byte[] byEnc;
	try
	{
		byEnc = Convert.FromBase64String(data);
	}
	catch
	{
		return null;
	}

	DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
	MemoryStream ms = new MemoryStream(byEnc);
	CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
	StreamReader sr = new StreamReader(cst);
	return sr.ReadToEnd();
}
#endregion

/base64-------------------------------------------------------------------------------------------

#region Base64加密解密
/// <summary>
/// Base64加密
/// </summary>
/// <param name="input">需要加密的字符串</param>
/// <returns></returns>
public static string Base64Encrypt(string input)
{
	return Base64Encrypt(input, new UTF8Encoding());
}

/// <summary>
/// Base64加密
/// </summary>
/// <param name="input">需要加密的字符串</param>
/// <param name="encode">字符编码</param>
/// <returns></returns>
public static string Base64Encrypt(string input, Encoding encode)
{
	return Convert.ToBase64String(encode.GetBytes(input));
}

/// <summary>
/// Base64解密
/// </summary>
/// <param name="input">需要解密的字符串</param>
/// <returns></returns>
public static string Base64Decrypt(string input)
{
	return Base64Decrypt(input, new UTF8Encoding());
}

/// <summary>
/// Base64解密
/// </summary>
/// <param name="input">需要解密的字符串</param>
/// <param name="encode">字符的编码</param>
/// <returns></returns>
public static string Base64Decrypt(string input, Encoding encode)
{
	return encode.GetString(Convert.FromBase64String(input));
}
#endregion

#region MD5加密
/// <summary>  
/// MD5加密  
/// </summary>  
/// <param name="strSource">需要加密的字符串</param>  
/// <returns>MD5加密后的字符串</returns>  
//   [OperationContract]
public static string Md5Encrypt(string strSource)
{
	//把字符串放到byte数组中  
	byte[] bytIn = System.Text.Encoding.Default.GetBytes(strSource);
	//建立加密对象的密钥和偏移量          
	byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量  
	byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥  
	//实例DES加密类  
	DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
	mobjCryptoService.Key = iv;
	mobjCryptoService.IV = key;
	ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
	//实例MemoryStream流加密密文件  
	System.IO.MemoryStream ms = new System.IO.MemoryStream();
	CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
	cs.Write(bytIn, 0, bytIn.Length);
	cs.FlushFinalBlock();

	string strOut = System.Convert.ToBase64String(ms.ToArray());
	return strOut;
}

/// <summary>  
/// MD5解密  
/// </summary>  
/// <param name="Source">需要解密的字符串</param>  
/// <returns>MD5解密后的字符串</returns>  
//  [OperationContract]
public static string Md5Decrypt(string Source)
{
	//将解密字符串转换成字节数组  
	byte[] bytIn = System.Convert.FromBase64String(Source);
	//给出解密的密钥和偏移量,密钥和偏移量必须与加密时的密钥和偏移量相同  
	byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量  
	byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥  
	DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
	mobjCryptoService.Key = iv;
	mobjCryptoService.IV = key;
	//实例流进行解密  
	System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
	ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
	CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
	StreamReader strd = new StreamReader(cs, Encoding.Default);
	return strd.ReadToEnd();
}
#endregion  

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值