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
}

标签:c#,md5,加密,解密
0
投稿

猜你喜欢

  • java虚拟机内存溢出及泄漏实例

    2023-11-27 15:22:06
  • 详解J2EE开发的网站部署到阿里云服务器的方法

    2022-06-21 07:50:16
  • C# List实现行转列的通用方案

    2022-03-28 02:53:04
  • Android中获取资源 id 及资源 id 的动态获取

    2023-06-30 04:38:06
  • 详述 DB2 分页查询及 Java 实现的示例

    2023-04-21 12:39:12
  • C#中的数据结构介绍

    2022-06-05 18:34:26
  • Linux下Hadoop 2.7.3 安装搭建过程

    2023-11-08 05:13:59
  • springmvc+shiro+maven 实现登录认证与权限授权管理

    2023-07-04 14:33:03
  • springboot maven 项目打包jar 最后名称自定义的教程

    2021-08-12 00:01:11
  • 深入解析Java的设计模式编程中建造者模式的运用

    2022-08-10 23:31:22
  • 实例解析Java中的构造器初始化

    2022-11-22 07:42:27
  • Java 实战范例之员工管理系统的实现

    2023-03-31 08:09:33
  • C#基于QRCode实现动态生成自定义二维码图片功能示例

    2023-04-03 04:08:43
  • Mybatis在sqlite中无法读写byte[]类问题的解决办法

    2021-08-06 21:06:07
  • 对Jpa中Entity关系映射中mappedBy的全面理解

    2023-07-25 03:48:39
  • Spring Security基于json登录实现过程详解

    2023-12-07 07:15:18
  • SpringBoot 项目瘦身maven/gradle详解

    2021-10-26 04:39:12
  • Java实现map转换成json的方法详解

    2022-09-09 12:26:03
  • SpringBoot文件分片上传的示例代码

    2023-06-18 11:30:15
  • c#使用linq把多列的List转化为只有指定列的List

    2022-07-04 12:00:31
  • asp之家 软件编程 m.aspxhome.com