using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace GT.Common.DES
{
/// <summary>
/// 3DES加解密类
/// </summary>
public class DESHelper
{ //构造一个对称算法
private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
#region 加密解密函数
/// <summary>
/// 字符串的加密
/// </summary>
/// <param name="Value">要加密的字符串</param>
/// <param name="sKey">密钥,必须32位</param>
/// <param name="sIV">向量,必须是8个字符</param>
/// <returns>加密后的字符串</returns>
public string EncryptString(string Value, string sKey,string sIV)
{
try
{
if (string.IsNullOrWhiteSpace(sKey))
{
sKey = key;
}
if (string.IsNullOrWhiteSpace(sIV))
{
sIV = iv;
}
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
byte[] biv=Encoding.Default.GetBytes (sIV); mCSP.IV = biv;
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);//创建加密对象
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, , byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch (Exception ex)
{
return ("Error in Encrypting " + ex.Message);
}
}
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="Value">加密后的字符串</param>
/// <param name="sKey">密钥,必须32位</param>
/// <param name="sIV">向量,必须是12个字符</param>
/// <returns>解密后的字符串</returns>
public string DecryptString(string Value, string sKey, string sIV)
{
try
{
if (string.IsNullOrWhiteSpace(sKey))
{
sKey = key;
}
if (string.IsNullOrWhiteSpace(sIV))
{
sIV = iv;
}
ICryptoTransform ct;//加密转换运算
MemoryStream ms;//内存流
CryptoStream cs;//数据流连接到数据加密转换的流
byte[] byt; //将3DES的密钥转换成byte
mCSP.Key = Convert.FromBase64String(sKey);
//将3DES的向量转换成byte
mCSP.IV = Encoding.Default.GetBytes(sIV);
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);//创建对称解密对象
byt = Convert.FromBase64String(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, , byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
catch (Exception ex)
{
return ("Error in Decrypting " + ex.Message);
}
}
#endregion #region KEY //<!--不要轻易修改,一定要保证跟生产环境的一致,防止丢失-->
//<!--秘钥32位-->
public static readonly string key = "aybcwdefgh1ntv2x3qr4u5o6igklszmp";
//<!--向量8位-->
public static readonly string iv = ""; #endregion } }

最新文章

  1. nodejs进阶(4)—读取图片到页面
  2. 《Spark大数据处理》—— 读后总结
  3. Lrc2Srt字幕转换精灵
  4. SurfaceOutput
  5. PIC32MZ tutorial -- Watchdog Timer
  6. symfony安装使用
  7. 常用jsp include用法,三种include的区别
  8. 设计模式之适配器模式(Adapter)
  9. 深入浅出之Smarty模板引擎工作机制(一)
  10. 编写3个不同版本的程序,令其均能输出ia的元素
  11. 转:sprintf与snprintf
  12. win32 消息说明
  13. C++惯用法:通过成员模板实现隐式转换(Coercion 强迫 by Member Template)
  14. iOS开发之XMPP即时通讯简单实现
  15. JavaScript基础学习(五)&mdash;其他引用类型
  16. bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
  17. 排序算法Java实现(堆排序)
  18. 数据库 --&gt; MySQL存储引擎介绍
  19. Ubuntu16.04系统下 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)、无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?”的方法
  20. MyBatis 3源码解析(四)

热门文章

  1. 【Python开发】Url中文字符时记得转码edcode("utf-8")
  2. springboot 极简使用例子: redis,MySql数据库,日志,netty,打包和运行
  3. [转帖]Intro Guide to Dockerfile Best Practices
  4. elasticsearch教程--中文分词器作用和使用
  5. NumPy进阶
  6. celery 调用scrapy
  7. SVN服务器搭建与配置管理
  8. Buy a Ticket CodeForces - 938D (dijkstra)
  9. 剑指offer-和为S的两个数字-知识迁移能力-python
  10. php 技术点积累