c#多种加解密示例(md5加密解密)
时间:2022-08-26 07:17:10
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Security.Cryptography;
using System.Text;
/// <summary>
/// 加解密
/// </summary>
public static class CryptHelper
{
#region RSA加密
/// <summary>
/// 用指定公钥加密文本
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="input">文本</param>
/// <returns></returns>
public static string RsaEncrypt(string publicKey, string input)
{
const string sFormat =
"<RSAKeyValue><Modulus>{0}</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
var provider = new RSACryptoServiceProvider();
var arrPubKey = Hex2Bytes(publicKey);
var pkB64 = Convert.ToBase64String(arrPubKey);
var xmlStr = string.Format(sFormat, pkB64);
var bytesInput = Encoding.UTF8.GetBytes(input);
provider.FromXmlString(xmlStr);
var encryptArray = provider.Encrypt(bytesInput, false);
var hexStr = BitConverter.ToString(encryptArray).Replace("-", "");
return hexStr.ToLower();
}
#endregion
#region 公用函数
/// <summary>
/// 将字节转换成16进制数字
/// </summary>
/// <param name="bytes">字节数组</param>
/// <returns></returns>
public static string Bytes2Hex(byte[] bytes)
{
var buffer = new StringBuilder();
foreach (var t in bytes)
{
buffer.AppendFormat("{0:x2}", t);
}
return buffer.ToString();
}
/// <summary>
/// 将16进制数组转换成字节
/// </summary>
/// <param name="input">16进制数组</param>
/// <returns></returns>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public static byte[] Hex2Bytes(string input)
{
if (string.IsNullOrEmpty(input)) return null;
var offset = input.Length%2;
if (offset == 1) input = "0" + input;
int i;
var list = new List<byte>();
for (i = 0; i < input.Length; i += 2)
{
var temp = input.Substring(i, 2);
byte bv;
var success = byte.TryParse(temp, NumberStyles.HexNumber, null, out bv);
if (!success) throw new ArgumentOutOfRangeException();
list.Add(bv);
}
return list.ToArray();
}
#endregion
#region SHA1加密
/// <summary>
/// SHA1加密 使用缺省密钥给字符串加密
/// </summary>
/// <param name="sourceString"></param>
/// <returns></returns>
public static string Sha1Encrypt(string sourceString)
{
var data = Encoding.Default.GetBytes(sourceString);
HashAlgorithm sha = new SHA1CryptoServiceProvider();
var bytes = sha.ComputeHash(data);
return BitConverter.ToString(bytes).Replace("-", "");
}
#endregion
#region DES加解密
/// <summary>
/// DES加密
/// </summary>
/// <param name="pubKey"></param>
/// <param name="input"></param>
/// <returns></returns>
public static string DesEncrypt(string pubKey, string input)
{
var des = new DESCryptoServiceProvider();
var bytes = Encoding.UTF8.GetBytes(input);
des.Key = Encoding.ASCII.GetBytes(pubKey);
des.IV = Encoding.ASCII.GetBytes(pubKey);
using (var ms = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cryptoStream.Write(bytes, 0, bytes.Length);
cryptoStream.FlushFinalBlock();
}
var data = ms.ToArray();
return BitConverter.ToString(data).Replace("-", "");
}
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="pubKey"></param>
/// <param name="input"></param>
/// <returns></returns>
public static string DesDecrypt(string pubKey, string input)
{
var des = new DESCryptoServiceProvider();
var bytes = Hex2Bytes(input);
des.Key = Encoding.ASCII.GetBytes(pubKey);
des.IV = Encoding.ASCII.GetBytes(pubKey);
using (var ms = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cryptoStream.Write(bytes, 0, bytes.Length);
cryptoStream.FlushFinalBlock();
}
var data = ms.ToArray();
return Encoding.UTF8.GetString(data);
}
}
#endregion
#region MD5加密
/// <summary>
/// MD5加密
/// </summary>
/// <param name="input">输入</param>
/// <returns></returns>
public static string Md5Encrypt(string input)
{
MD5 md5 = new MD5CryptoServiceProvider();
var data = Encoding.UTF8.GetBytes(input);
var encs = md5.ComputeHash(data);
return BitConverter.ToString(encs).Replace("-", "");
}
#endregion
}
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java虚拟机内存溢出及泄漏实例
详解J2EE开发的网站部署到阿里云服务器的方法
![](https://img.aspxhome.com/file/2023/9/64959_0s.jpg)
C# List实现行转列的通用方案
![](https://img.aspxhome.com/file/2023/4/75614_0s.png)
Android中获取资源 id 及资源 id 的动态获取
详述 DB2 分页查询及 Java 实现的示例
C#中的数据结构介绍
Linux下Hadoop 2.7.3 安装搭建过程
![](https://img.aspxhome.com/file/2023/0/58870_0s.png)
springmvc+shiro+maven 实现登录认证与权限授权管理
springboot maven 项目打包jar 最后名称自定义的教程
![](https://img.aspxhome.com/file/2023/2/69092_0s.jpg)
深入解析Java的设计模式编程中建造者模式的运用
![](https://img.aspxhome.com/file/2023/5/76315_0s.jpg)
实例解析Java中的构造器初始化
Java 实战范例之员工管理系统的实现
![](https://img.aspxhome.com/file/2023/2/81942_0s.png)
C#基于QRCode实现动态生成自定义二维码图片功能示例
Mybatis在sqlite中无法读写byte[]类问题的解决办法
对Jpa中Entity关系映射中mappedBy的全面理解
Spring Security基于json登录实现过程详解
![](https://img.aspxhome.com/file/2023/4/72354_0s.png)
SpringBoot 项目瘦身maven/gradle详解
Java实现map转换成json的方法详解
SpringBoot文件分片上传的示例代码
![](https://img.aspxhome.com/file/2023/8/57488_0s.jpg)
c#使用linq把多列的List转化为只有指定列的List
![](https://img.aspxhome.com/file/2023/2/82112_0s.png)