DES加密解密帮助类
public class DESCrypto
{
/// <summary>
/// 初始化des实例秘钥及向量
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private static DESCryptoServiceProvider InitDESInstance(string key)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] salt = new byte[] { 0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xF1 };
byte[] keyByte = Encoding.UTF8.GetBytes(key);
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(keyByte, salt, );
Rfc2898DeriveBytes rfcIv = new Rfc2898DeriveBytes("", salt, );
des.Key = rfcKey.GetBytes();
des.IV = rfcIv.GetBytes();
return des;
} #region 基于Base64的加密解密(不其他格式的加解密方法配合使用)
/// <summary>
/// 基于Base64
/// </summary>
/// <param name="plaintext"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string DESEncryptBase64(string plaintext,string key)
{
DESCryptoServiceProvider des = InitDESInstance(key);
byte[] dataByteArray = Encoding.UTF8.GetBytes(plaintext);
string ciphertext = "";
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
ciphertext = Convert.ToBase64String(ms.ToArray());
}
return ciphertext;
} /// <summary>
/// 基于Base64
/// </summary>
/// <param name="encrypt"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string DESDecryptBase64(string encrypt, string key)
{
DESCryptoServiceProvider des = InitDESInstance(key);
byte[] dataByteArray = Convert.FromBase64String(encrypt);
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
#endregion #region 基于2位十六进制格式的加密解密(不其他格式的加解密方法配合使用)
/// <summary>
/// 加密
/// </summary>
/// <param name="plaintext">明文</param>
/// <param name="key"></param>
/// <returns></returns>
public static string DESEncrypt(string plaintext, string key)
{
DESCryptoServiceProvider des = InitDESInstance(key);
StringBuilder sb = new StringBuilder();
byte[] dataByteArray = Encoding.UTF8.GetBytes(plaintext);
string ciphertext = "";
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
//输出加密文本
foreach (byte b in ms.ToArray())
{
sb.AppendFormat("{0:X2}", b);
}
ciphertext = sb.ToString();
}
return ciphertext; } /// <summary>
/// 解密
/// </summary>
/// <param name="ciphertext">密文</param>
/// <param name="key"></param>
/// <returns></returns>
public static string DESDecrypt(string ciphertext, string key)
{
DESCryptoServiceProvider des = InitDESInstance(key);
byte[] dataByteArray = new byte[ciphertext.Length / ];
for (int x = ; x < ciphertext.Length / ; x++)
{
int i = (Convert.ToInt32(ciphertext.Substring(x * , ), ));
dataByteArray[x] = (byte)i;
}
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
#endregion #region 文件加密解密(不其他格式的加解密方法配合使用)
/// <summary>
/// 加密文件
/// </summary>
/// <param name="sourceFile">文件的物理路径</param>
/// <param name="encryptFile">文件的物理路径</param>
/// <param name="key"></param>
public static void DESEncryptFile(string sourceFile, string encryptFile, string key)
{
if (string.IsNullOrEmpty(sourceFile) || string.IsNullOrEmpty(encryptFile)||!File.Exists(sourceFile)) return; DESCryptoServiceProvider des = InitDESInstance(key); using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
using (FileStream encryptStream = new FileStream(encryptFile, FileMode.Create, FileAccess.Write))
{
byte[] dataByteArray = new byte[sourceStream.Length];
sourceStream.Read(dataByteArray, , dataByteArray.Length);
using (CryptoStream cs = new CryptoStream(encryptStream, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
}
}
} /// <summary>
/// 解密文件
/// </summary>
/// <param name="encryptFile">文件的物理路径</param>
/// <param name="decryptFile">文件的物理路径</param>
/// <param name="key"></param>
public static void DESDecryptFile(string encryptFile, string decryptFile, string key)
{
if (string.IsNullOrEmpty(encryptFile) || string.IsNullOrEmpty(decryptFile) || !File.Exists(encryptFile))return; DESCryptoServiceProvider des = InitDESInstance(key); using (FileStream encryptStream = new FileStream(encryptFile, FileMode.Open, FileAccess.Read))
using (FileStream decryptStream = new FileStream(decryptFile, FileMode.Create, FileAccess.Write))
{
byte[] dataByteArray = new byte[encryptStream.Length];
encryptStream.Read(dataByteArray, , dataByteArray.Length);
using (CryptoStream cs = new CryptoStream(decryptStream, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, , dataByteArray.Length);
cs.FlushFinalBlock();
}
}
} /// <summary>
/// 加密文本并输出到文件
/// </summary>
/// <param name="plaintext"></param>
/// <param name="FileName">文件的物理路径</param>
/// <param name="Key"></param>
public static void DESEncryptTextToFile(string plaintext, string FileName, string key)
{
if (string.IsNullOrEmpty(FileName)) return; DESCryptoServiceProvider des = InitDESInstance(key);
byte[] dataByteArray = Encoding.UTF8.GetBytes(plaintext); using (FileStream fStream = File.Open(FileName, FileMode.Create))
using (CryptoStream cStream = new CryptoStream(fStream, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cStream.Write(dataByteArray, , dataByteArray.Length);
cStream.FlushFinalBlock();
}
} /// <summary>
/// 解密文件中的密文并返回
/// </summary>
/// <param name="FileName"></param>
/// <param name="Key"></param>
/// <returns></returns>
public static string DESDecryptTextFromFile(string FileName, string key)
{
if (string.IsNullOrEmpty(FileName)||!File.Exists(FileName)) return ""; DESCryptoServiceProvider des = InitDESInstance(key); using (FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate))
using (CryptoStream cStream = new CryptoStream(fStream, des.CreateDecryptor(), CryptoStreamMode.Read))
using (StreamReader sReader = new StreamReader(cStream))
{
string val = sReader.ReadToEnd();
return val;
}
}
#endregion
}
Tips:参考MSDN整理编写,比较全面。
DES加密解密帮助类的更多相关文章
- des 加密解密工具类
最近在做des的双对称加密解密,特此记录一下. des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码 ...
- MD5&&DES加密解密帮助类
public class _MD5_NETCore加密解密 { /// <summary> /// 加密 /// </summary> /// <param name=& ...
- C#获取CPU与网卡硬盘序列号及Base64和DES加密解密操作类
public class RegisterHelp { /// <summary> /// CPU /// </summary> /// <returns>< ...
- 【DES加密解密】 C#&JAVA通用
DES加密解密 C# Code /// <summary> /// DES加密解密帮助类 /// </summary> public static class DESHelpe ...
- 一个java的DES加密解密类转换成C#
一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...
- DES加密解密
加密后生成Base64字符串,并去除'='字符. 加密后替换掉'+',这样加密后的字符串可以作为url参数传递. using System; using System.IO; using System ...
- C# MD5加密解密帮助类
/// <summary> /// MD5加密解密帮助类 /// </summary> public static class DESHelper { ...
- 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)
原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...
- DES加密解密与AES加密解密
随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...
随机推荐
- Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用
原文:Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用 “/vs2005”应用程序中的服务器错误.--------------------------- ...
- js 正则学习小记之NFA引擎
原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣. 求抱大腿,求大神调教. 之前大致有个印象,正 ...
- NYoj The partial sum problem(简单深搜+优化)
题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=927 代码: #include <stdio.h> #include & ...
- 关于Promise的一个案例
题目:红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次:如何让三个灯不断交替重复亮灯?(用Promise实现) 解答思路一: function red(){ console.log('red'); } ...
- NPOI实现Excel导入导出
NPOI实现Excel的导入导出,踩坑若干. Cyan是博主[Soar360]自2014年以来开始编写整理的工具组件,用于解决现实工作中常用且与业务逻辑无关的问题. 什么是NPOI? NPOI 是 P ...
- 高性能网络server--I/O复 select poll epoll_wait之间的差
一个.select 方式作为收集,最多只能监控1024描述叙事断裂的文件,内部使用位操作,相应的位置1或设置0,必须是可读.可写.三类除单独的事件,内部查询方法.将全部的套接字从内核到用户空间之间进行 ...
- android--解--它们的定义tabhost(动态添加的选项+用自己的主动性横向滑动标签+手势切换标签页和内容特征)
在本文中,解决他们自己的定义tabhost实现,并通过代码集成动态加入标签功能.自己主动标签横向滑动功能.和手势标签按功能之间切换. 我完成了这个完美的解决方案一起以下: 1.定义tabwidget布 ...
- java学习笔记1——window7下JDK环境变量配置图解
1. 首先下载Java安装工具包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...
- 搭建一个BS 的简单SOA 架构(直接通过jquery 调用后台的 wcf 服务的架构)(第一天)
亲们!还在用传统的三层架构吗?你还在对SOA架构 不了解吗? 那就赶快来学习下一个 比较简单的SOA的架构吧!我会手把手的 教会你们怎么搭建这个 简单的SOA的架构. 其中用的技术点保证 WCF,a ...
- [kmp+dp] hdu 4628 Pieces
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4622 Reincarnation Time Limit: 6000/3000 MS (Java/Ot ...