C#使用Des加密

来源:互联网 发布:cpuz怎么看显卡知乎 编辑:程序博客网 时间:2024/04/30 15:25

DES(Data Encryption Standard)算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法.

哎理论的东西就不多说了,很容易让人头痛,我们只要有个概念:有对称加密和非对称加密这两种类型.

对称加密:只有一个密钥,加密数据和解密数据时都用它.打个比方,跟我们平时开门的门锁一样,关门开门都用的一个锁匙.密钥就相当于是钥匙.在代码中其实就相当于是传给函数的一个参数.

非对称加密:有两个密钥,一个公钥,一个私钥.相当于我们锁门用一个钥匙,开门的时候要用另外一个钥匙.

 

对于对称加密我们可能较容易理解,反正只要一个密钥,写代码时就是弄一个变量,然后加密的函数用这个变量做参数,解密函数也用它做参数.

非对称加密就稍微难理解点,它不一般不是用在同一个程序中.而用于不同的程序间传数据.假如有这样一个场景,你在某网站上输入一个密码,然后要传到服务器去验证.那密码在传输过程中不安全,假如被人截取了可咋整啊,这时你就会想到把密码加密.这样人家截取到了也看不懂.这时不能用对称加密,因为就一个密钥,只你客户端程序知道它并用它加密,但服务器那边不知道,你想到传送密码过去时把密钥也传过去,这样就同样不安全,也怕被截取.于是非对称加密闪亮登场了.

首先服务器那端通过某个算法生成一对密钥匙,一个公钥A,一个私钥B.这样A加密后的东西用B可以解密,B加密的东西用A可以解密.所谓公钥自然是公开的,大家都知道.这样所有人都可以用公钥去加密,而私钥只要服务器知道,别人不会知道,所以你就安全了.那有人会问能不能通过公钥A算出B,理论上自然是能的,不然也不存在破解密码那一说了.只是难度可能比较大.这主要是一些数学算法不太容易逆推,这就涉及些数学的理论了啊.

 

算法的具体实现我们不管了,.net的一些系统函数给我们完成了那些工作,我们只要去调用就行.

using System.Text;

using System.IO;

using System.Security.Cryptography; //调用那些函数需要先引用这两个命名空间

 

string myKey = "weiwenhp";  //这就是传说中的密钥了,你可以随便取一个.Des的密钥是64位的二进制,那换成字符串的话只能是8个字符.

//加密的函数

string JiaMi(string sourceString,string key)

{

byte []keyBytes = Encoding.UTF8.GetBytes(key);

byte []keyIV = keyBytes;

byte []inputByteArray = Encoding.UTF8.GetBytes(sourceString);

DESCryptoServiceProvider  desProvider = new DESCryptoServiceProvider();

MemoryStream memStream = new MemoryStream();

CryptoStream  crypStream = new CryptoStream(memStream, desProvider.CreateEncryptor(keyBytes,keyIV), CryptoStreamMode.Write);

crypStream.Write(inputByteArray,0, inputByteArray.Length);

crypStream.FlushFinalBlock();

returnConvert.ToBase64String(memStream.ToArray());

}

 

//解密的函数

string JieMi(string encryptString,string key)

{

byte []keyBytes = Encoding.UTF8.GetBytes(key);

byte []keyIV = keyBytes;

byte []inputByteArray = Convert.FromBase64String(encryptString);

DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();

MemoryStream memStream = new MemoryStream();

CryptoStream crypStream = new CryptoStream(memStream, desProvider.CreateDecryptor(keyBytes,keyIV), CryptoStreamMode.Write);

crypStream.Write(inputByteArray,0, inputByteArray.Length);

crypStream.FlushFinalBlock();

returnEncoding.UTF8.GetString(memStream.ToArray());

}

 

string password = "pwd";     //假如这是你的密码

string miWen  = JiaMi(password,myKey);   //加密后的密文,这里的值是 9TEsI4KkHxw=

string mingWen = JieMi(miWen,myKey);    //把密文解密,这里的值是pwd

 

原创粉丝点击