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
}


猜你喜欢
- 一、单文件压缩 场景,文件可能比较大,需要压缩传输,比如上传和下载/// <summary&g
- 估计学过Unix开发但是没有细致学习Java的同学们会疑惑了,操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制
- 前言小伙伴们知道,在 Shiro 中,默认是支持权限通配符的,例如系统用户有如下一些权限:system:user:addsystem:use
- java try catch异常后还会继续执行吗catch中如果你没有再抛出异常,那么catch之后的代码是可以继续执行的,但是try中,报
- 1. Spring ProfileSpring可使用Profile绝对程序在不同环境下执行情况,包含配置、加载Bean、依赖等。 Sprin
- 1.屏幕是否亮屏:PowerManager powerManager = (PowerManager) context.getS
- 本文研究的主要是SpringMVC中使用Thymeleaf模板引擎的相关内容,具体介绍如下。Thymeleaf提供了一组Spring集成,允
- 当前的Winform分页控件中,当前导出的数据一般使用Excel来处理,Excel的文档可以用于后期的数据展示或者批量导入做准备,因此是比较
- 一、简介现在的Android应用程序中,不可避免的都会使用到图片,如果每次加载图片的时候都要从网络重新拉取,这样不但很耗费用户的流量,而且图
- 本文实例为大家分享了ImageSwitcher图像切换器的实现代码,供大家参考,具体内容如下描述在该实例中,提供一个图片切换器和两个点击按钮
- Json格式在后台服务中的重要性就不多说了,直入正题。首先引入pom文件,这里使用的是1.2.83版本<dependency>
- 下载地址:https://www.jb51.net/database/588158.html?_=1522396455592运行程序,关闭工
- Java 目前已经出到13的版本,但是国内大部分公司应该都停留在 Java 8 的版本(不敢承担升级带来的风险)。在Java8中给我们带来了
- 前言前面的篇幅里有提到通过InitializingBean和Disposable等接口可以对bean的初始化和销毁做一些自定义操作,那么有一
- 什么是JWT,它是一种对API的保护方案,为什么要进行保护呢防泄漏:你肯定不希望你的数据能被别人随意调用,比如公司的机密信息,不可能每个人都
- 理解圆弧绘制GDI+中对于圆弧的绘制,是以给定的长方形(System.Drawing.Rectangle 结构)为边界绘制的椭圆的
- 一、概述System.Net.WebClient属于高层类、使用简单。均支持异步版本。支持http,https,fpt,files等URI。
- using System;using System.Data;using System.Data.OleDb;namespace ZFSof
- Servlet 实现文件上传所谓文件上传就是将本地的文件发送到服务器中保存。例如我们向百度网盘中上传本地的资源或者我们将写好的博客上传到服务
- 原理很简单,利用Path画一个图,然后用动画进行播放,播放时间由依赖属性输入赋值与控件内部维护的一个计时器进行控制。控件基本是玩具,无法作为