/*******************************************************
*
* 作者:朱皖苏
* 创建日期:20180521
* 说明:此文件只包含一个类,具体内容见类型注释。
* 运行环境:.NET 4.0
* 版本号:1.0.0
*
* 历史记录:
* 创建文件 朱皖苏 20180521 20:08
*
*******************************************************/ using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace Dben.CommonLib.Cryptography
{
/// <summary>
/// Aes 加密
/// </summary>
public class AESEncryption
{
/// <summary>
/// AES加密
/// </summary>
/// <param name="encryptString">待加密字符串</param>
/// <param name="key">16位密钥</param>
/// <returns></returns>
public static string EncryptAes(string encryptString, string key)
{
try
{
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
SymmetricAlgorithm des = Aes.Create();
des.Key = Encoding.ASCII.GetBytes(key.Substring(, )); des.IV = Encoding.ASCII.GetBytes(key.Substring());
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.Zeros; using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock(); byte[] desBytes = mStream.ToArray();
StringBuilder sb = new StringBuilder();
for (int i = ; i < desBytes.Length; i++)
{
sb.Append(desBytes[i].ToString("x2"));
}
return sb.ToString();
}
}
}
catch (Exception)
{
return encryptString;
} } /// <summary>
/// AES解密
/// </summary>
/// <param name="decryptString">解密字符串</param>
/// <param name="key">密钥</param>
/// <returns></returns>
public static string DecryptAes(string decryptString, string key)
{
try
{
byte[] inputByteArray = StrToToHexByte(decryptString);
SymmetricAlgorithm des = Aes.Create();
des.Key = Encoding.ASCII.GetBytes(key.Substring(, )); des.IV = Encoding.ASCII.GetBytes(key.Substring());
des.Padding = PaddingMode.Zeros;
des.Mode = CipherMode.CBC;
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, des.CreateDecryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock();
byte[] desDecryBytes = mStream.ToArray();
return Encoding.UTF8.GetString(desDecryBytes);
}
catch (Exception)
{
return decryptString;
}
} /// <summary>
/// 转16进制字符串
/// </summary>
/// <param name="hexString">待转换字符串</param>
/// <returns></returns>
private static byte[] StrToToHexByte(string hexString)
{
try
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % ) != )
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / ];
for (int i = ; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * , ), );
return returnBytes;
}
catch (Exception)
{
return null;
}
}
}
}

最新文章

  1. 【集合框架】JDK1.8源码分析之LinkedHashMap(二)
  2. IOS中CoreData浅析
  3. 本田--CRV
  4. TCP protocol
  5. 开源的rtsp实现
  6. 在pcDuino上刷了AndDroid,Ubuntu,XBMC
  7. Spring Cache使用详解
  8. python装饰器练习题
  9. 新建maven项目遇到Select an Archetype时没有maven-archetype-webapp处理方法
  10. Vue使用过程中常见问题
  11. css flex布局,小程序flex布局,垂直居中完美解决
  12. 分类问题的几个评价指标(Precision、Recall、F1-Score、Micro-F1、Macro-F1
  13. Redis Sentinel实现高可用配置
  14. BZOJ3561 DZY Loves Math VI 莫比乌斯反演
  15. SpringBoot 定时任务不能同时运行的问题
  16. ajax模拟获取json
  17. LeetCode--383--赎金信
  18. python基础(八)——多线程
  19. [多线程]wait和notify
  20. PHP伪原创同义词替代代码示意

热门文章

  1. jq制作tab栏
  2. 高可用之nginx配置文件详解
  3. java 文件过滤器 java.io.FilenameFilter
  4. P1010 数值交换
  5. WPF 使用 SharpDx 异步渲染
  6. 2019-9-20-SharpDx-的代替项目
  7. linux PCI 寻址
  8. git 通过 SublimeMerge 处理冲突
  9. 【NOIP数据结构专项】单调队列单调栈
  10. UTF-8、UTF-16、UTF-32编码的相互转换(不使用现成的函数)