当前位置:首页 > 芯闻号 > 充电吧
[导读]DES加密应该是最基础的加密算法。DES一共就有4个参数参与运作:明文、密文、密钥、向量。为了初学者容易理解,可以把4个参数的关系写成:密文=明文+密钥+向量;明文=密文-密钥-向量。为什么要向量这个

DES加密应该是最基础的加密算法。DES一共就有4个参数参与运作:明文、密文、密钥、向量。为了初学者容易理解,可以把4个参数的关系写成:密文=明文+密钥+向量;明文=密文-密钥-向量。为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复,那么这个词加上密钥形成的密文,仍然会重复,这给破解者有机可乘,破解者可以根据重复的内容,猜出是什么词,然而一旦猜对这个词,那么,他就能算出密钥,整篇文章就被破解了!加上向量这个参数以后,每块文字段都会依次加上一段值,这样,即使相同的文字,加密出来的密文,也是不一样的,算法的安全性大大提高!
下面我们做加密和解密方法:
using System;
//这个是使用DES的基础
using System.Security.Cryptography;
//这个是处理文字编码的前提
using System.Text;
//以“流”的形式处理文字,也是微软DES算法要求的
using System.IO;
///
///明文
///密钥
///向量
///
public string DESEncrypt(string strPlain,string strDESKey,string strDESIV)
{
 //把密钥转换成字节数组
 byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
 //把向量转换成字节数组
 byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
 //声明1个新的DES对象
 DESCryptoServiceProvider desEncrypt=new DESCryptoServiceProvider();
 //开辟一块内存流
 MemoryStream msEncrypt=new MemoryStream();
 //把内存流对象包装成加密流对象
 CryptoStream csEncrypt=new CryptoStream(msEncrypt,desEncrypt.CreateEncryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Write);
 //把加密流对象包装成写入流对象
 StreamWriter swEncrypt=new StreamWriter(csEncrypt);
 //写入流对象写入明文
 swEncrypt.WriteLine(strPlain);
 //写入流关闭
 swEncrypt.Close();
 //加密流关闭
 csEncrypt.Close();
 //把内存流转换成字节数组,内存流现在已经是密文了
 byte[] bytesCipher=msEncrypt.ToArray();
 //内存流关闭
 msEncrypt.Close();
 //把密文字节数组转换为字符串,并返回
 return UnicodeEncoding.Unicode.GetString(bytesCipher);
}
///
///密文
///密钥
///向量
///
public string DESDecrypt(string strCipher,string strDESKey,string strDESIV)
{
 //把密钥转换成字节数组
 byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
 //把向量转换成字节数组
 byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
 //把密文转换成字节数组
 byte[] bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);
 //声明1个新的DES对象
 DESCryptoServiceProvider desDecrypt=new DESCryptoServiceProvider();
 //开辟一块内存流,并存放密文字节数组
 MemoryStream msDecrypt=new MemoryStream(bytesCipher);
 //把内存流对象包装成解密流对象
 CryptoStream csDecrypt=new CryptoStream(msDecrypt,desDecrypt.CreateDecryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Read);
 //把解密流对象包装成读出流对象
 StreamReader srDecrypt=new StreamReader(csDecrypt);
 //明文=读出流的读出内容
 string strPlainText=srDecrypt.ReadLine();
 //读出流关闭
 srDecrypt.Close();
 //解密流关闭
 csDecrypt.Close();
 //内存流关闭
 msDecrypt.Close();
 //返回明文
 return strPlainText;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  DES算法   DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,密钥长64位,密钥事实上

关键字: des算法 rsa算法

  DES全称为Data EncrypTIon Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密

关键字: des des算法

  RSA算法   RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体

关键字: des算法

  摘要:在银行金融界及非金融界,越来越多地用到了DES 算法, DES 全称为Data EncrypTIon Standard即数据加密算法。下面来说说DES算法的应用误区及安全性分析。

关键字: des算法

目前主流的面向对象的编程语言C#、C++、Java; 一、C#的特点: C#在带来对应用程序的快速开发能力的同时,并没有牺牲C与C++程序员所关心的各种特性。它忠实地继承了C和C++的优点。如果你对C

关键字: c# 面向对象编程

作者:朱金灿来源:http://blog.csdn.net/clever101         什么是好的开发语言和好的开发框架?这个问题可能一千个人有一千种答案,我的答案是在满足用户效率需要的前提下

关键字: c# QT

关于边缘改进全局阈值处理基本实现是: 1.先计算其边界,利用拉普拉斯或者梯度变换都以。 2.计算变化后边界图像的绝对值3.指定一个阈值(一般以百分比的形式指定,比如我指定90%,如果存在有灰度k,灰度

关键字: c# 函数

用过C#的人,一般都知道委托和事件。如果没有用过C#,我在这里简单解释一下委托,如果用过了,下面可以skip。委托是一个方法声明,我们知道,在C语言中,可以通过函数指针表示一个地址的CALL方法,委托

关键字: c# c++

我刚用C#一个来月,可能理解得不对,还请大家指教。读懂文章你需要对C语言的指针有所理解。需要注意区别:对C\C++来说,任何类型都可以当成C#的“引用类型”,因为有指针。【在内存上】void foo(

关键字: c#

最近有段时间因为有个项目一直需要Socket数据传输。所以呢没办法就整了一套Socket最简单的版本出来。以便自己日后方便使用。我遇到的程序Socket是通过Tcp Ip的方式进行数据传输的.不多说先

关键字: c# socket
关闭
关闭