des和Rijndael加密
------------IV的作用:
为了保证数据的安全,.NET基类库中提供的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥和一个初始化向量(IV,Initialization Vector)对数据执行加密转换。密钥和初始化向量IV一起决定如何加密数据,以及如何将数据解密为原始数据。通信双方都必须知道这个密钥和初始化向量才能够加密和解密数据。
初始化向量IV的作用:防止随机产生的明文和密文相同
------------加密类:
#region public static DES encrypt for string
///<summary>
///static DES encrypt for string
///</summary>
///<returns>encrypted string</returns>
///<param name="OriginalString">original string</param>
///<param name="EncryptKey">encrypt key, must 8 characters</param>
///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
public static string DesEncryptString(string OriginalString, string EncryptKey, string EncryptOffset)
{
byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
using (MemoryStream ms = new MemoryStream())
{
byte[] inData = Encoding.Default.GetBytes(OriginalString);
try
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}
return Convert.ToBase64String(ms.ToArray());
}
catch
{
return "";
}
}
}
#endregion
#region public static DES decrypt for string
///<summary>
///DES decrypt for string
///</summary>
///<returns>dncrypted string</returns>
///<param name="EncryptedString">original string</param>
///<param name="EncryptKey">encrypt key, must 8 characters</param>
///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
public static string DesDecryptString(string EncryptedString, string EncryptKey, string EncryptOffset)
{
byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
using (MemoryStream ms = new MemoryStream())
{
byte[] inData = Convert.FromBase64String(EncryptedString);
try
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}
return Encoding.Default.GetString(ms.ToArray());
}
catch
{
return "";
}
}
}
#endregion
#region public static DES encrypt for file
/// <summary>
/// DES encrypt for file
/// </summary>
/// <param name="m_InFilePath">Input file path</param>
/// <param name="m_OutFilePath">Output file path</param>
/// <param name="strEncrKey">key, must 8 characters</param>
///<param name="strEncrOffset">encrypt IV, must >= 8 characters</param>
/// <returns>success or not</returns>
public static bool DESEncryptFile(string m_InFilePath, string m_OutFilePath, string strEncrKey, string strEncrOffset)
{
if (File.Exists(m_InFilePath) == false)
{
return false;
}
byte[] btKey = Encoding.Default.GetBytes(strEncrKey);
byte[] btIV = Encoding.Default.GetBytes(strEncrOffset);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] btFile = File.ReadAllBytes(m_InFilePath);
using (FileStream fs = new FileStream(m_OutFilePath, FileMode.Create, FileAccess.Write))
{
try
{
using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 0, btFile.Length);
cs.FlushFinalBlock();
}
fs.Close();
}
catch
{
fs.Close();
return false;
}
}
return true;
}
#endregion
#region public static DES decrypt for file
/// <summary>
/// DES decrypt for file
/// </summary>
/// <param name="m_InFilePath">Input file path</param>
/// <param name="m_OutFilePath">Output file path</param>
/// <param name="sDecrKey">key, must 8 characters</param>
///<param name="strEncrOffset">encrypt IV, must >= 8 characters</param>
/// <returns>success or not</returns>
public static bool DESDecryptFile(string m_InFilePath, string m_OutFilePath, string sDecrKey, string strEncrOffset)
{
if (File.Exists(m_InFilePath) == false)
{
return false;
}
byte[] btKey = Encoding.Default.GetBytes(sDecrKey);
byte[] btIV = Encoding.Default.GetBytes(strEncrOffset);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] btFile = File.ReadAllBytes(m_InFilePath);
using (FileStream fs = new FileStream(m_OutFilePath, FileMode.Create, FileAccess.Write))
{
try
{
using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 0, btFile.Length);
cs.FlushFinalBlock();
}
fs.Close();
}
catch
{
fs.Close();
return false;
}
}
return true;
}
#endregion
#region public static AES/CBC/PKCS7Padding encrypt for string
///<summary>
///static AES/CBC/PKCS7Padding encrypt for string
///</summary>
///<returns>encrypted string</returns>
///<param name="OriginalString">original string</param>
///<param name="EncryptKey">encrypt key, must 8 characters</param>
///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
public static string AESEncryptString(string OriginalString, string EncryptKey, string EncryptOffset)
{
try
{
byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = btKey;
rDel.Mode = CipherMode.CBC;
rDel.Padding = PaddingMode.PKCS7;
using (MemoryStream ms = new MemoryStream())
{
byte[] inData = Encoding.Default.GetBytes(OriginalString);
using (CryptoStream cs = new CryptoStream(ms, rDel.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}
return Convert.ToBase64String(ms.ToArray());
}
}
catch
{
return "";
}
}
#endregion
#region public static AES/CBC/PKCS7Padding decrypt for string
///<summary>
///AES/CBC/PKCS7Padding decrypt for string
///</summary>
///<returns>dncrypted string</returns>
///<param name="EncryptedString">original string</param>
///<param name="EncryptKey">encrypt key, must 8 characters</param>
///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
public static string AESDecryptString(string EncryptedString, string EncryptKey, string EncryptOffset)
{
try
{
byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = btKey;
rDel.Mode = CipherMode.CBC;
rDel.Padding = PaddingMode.PKCS7;
using (MemoryStream ms = new MemoryStream())
{
byte[] inData = Convert.FromBase64String(EncryptedString);
using (CryptoStream cs = new CryptoStream(ms, rDel.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}
return Encoding.Default.GetString(ms.ToArray());
}
}
catch
{
return "";
}
}
#endregion
}
des和Rijndael加密的更多相关文章
- C#中使用DES和AES加密解密
C#中使用DES和AES加密解密 2008-01-12 09:37 using System;using System.Text;using System.Security.Cryptography; ...
- C语言单片和C#语言服务器端DES及3DES加密的实现
原文:C语言单片和C#语言服务器端DES及3DES加密的实现 公司最近在做单片机和C#语言的通信.用的是Socket通信.传输的数据是明文,后来 在会上讨论准备用DES加密(对称加密)来做. 双方约定 ...
- iOS DES ECB 模式加密
//iOS DES ECB 模式加密 #import <CommonCrypto/CommonCryptor.h> ,,,,,,,}; +(NSString *) encryptUseDE ...
- 加密算法(对称加密)AES、DES (非对称加密)RSA、DSA
目前主流的加密方式有:(对称加密)AES.DES (非对称加密)RSA.DSA
- MD5 不可逆加密,Des对称可逆加密 ,RSA非对称可逆加密 ,数字证书 SSL
:MD5 不可逆加密2:Des对称可逆加密3:RSA非对称可逆加密4:数字证书 SSL Anker_张(博客园)http://www.cnblogs.com/AnkerZhang/ 1:MD5 不可逆 ...
- 【转】Java Cipher类 DES算法(加密与解密)
Java Cipher类 DES算法(加密与解密) 1.加密解密类 import java.security.*; import javax.crypto.*; import java.io.*; / ...
- 使用DES算法实现加密解密
使用DES算法实现加密解密 我们常见的加密算法有DES.MD5.IDEA.AES等等,这篇随笔介绍使用DES算法实现加密解密 首先介绍一下DES算法: DES算法为密码体制中的对称密码体制,又被称为美 ...
- MD5,Des,RSA加密解密
一.加密和解密 下面先熟悉几个概念 1>对称加密:加密的key和解密的key是同一个 但是如何确保密钥安全地进行传递?秘钥的安全是一个问题 2>非对称加密:加密点的key和解密的key不是 ...
- .NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现
场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组. 问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距 分析:平台不 ...
随机推荐
- 批处理添加iis wpg、users对IIS的访问权限
原文 批处理添加iis wpg.users对IIS的访问权限 上一篇,我们学习了如何使用批处理删除各种帐户在IIS中的访问权限.下面,我们来看看,如何通过批处理添加iis_wpg.users对IIS的 ...
- XML概要
早在两年前,我一直听说XML,但是,只是没有时间去研究它.也不知道它的作用,花了一些时间最近几天来学习他们的语言.是XML的一些简介希望能对各位同学有所帮助: XML是eXtensible Ma ...
- POJ 1066 Treasure Hunt(相交线段&&更改)
Treasure Hunt 大意:在一个矩形区域内.有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越仅仅能在中点穿越. 思路:须要巧妙的转换一 ...
- ODP.NET 之访问 Oracle 数据库
ODP.NET 之访问 Oracle 数据库 要相使用 Oracle Data Provider For .NET(ODP.NET), 必须先安装 ODP.NET 或者是 ODAC(Oracle Da ...
- View中选择的数据行中的部分数据传入到Controller中
将View中选择的数据行中的部分数据传入到Controller中 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...
- Spring + Spring MVC + Hibernate项目开发集成(注解)
在自己从事的项目中都是使用xml配置的方式来进行的,随着项目的越来越大,会发现配置文件会相当的庞大,这个不利于项目的进行和后期的维护.于是考虑使用注解的方式来进行项目的开发,前些日子就抽空学习了一下. ...
- 【百度地图API】如何使用suggestion--下拉列表方式的搜索建议
原文:[百度地图API]如何使用suggestion--下拉列表方式的搜索建议 摘要: 百度地图上有一个很强大的搜索建议功能,以下拉列表的方式展示出来.比如,输入“百度”,下拉列表中就会出现“北京市海 ...
- HDU 1251 统计拼图 Trie解决问题的方法
基本上找到一个标准前缀的问题是,只需要insert和search它功能. 这里的主要变化是我n该记录方法,这里n国旗代表的不是叶节点,但是话的标志这条道路后的数字. 然后找到需要找到一个词的前缀,假如 ...
- asp.net webform生命周期
- 高性能双端js模板
高性能双端js模板(新增filter)---simplite simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染. 渲染性能十分突出. 支持浏览器 ...