您的位置 » 首页 » 编程开发 » C#编程使用Des加密源码解析

C#编程使用Des加密源码解析

发表于5年前 | 作者: seay | 分类: 编程开发 | 孵化于:2012年06月04日 | 文章热度:3,219 次 全屏阅读

显示不全请点击全屏阅读

DES(Data Encryption Standard)算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法.
哎理论的东西就不多说了,很容易让人头痛,我们只要有个概念:有对称加密和非对称加密这两种类型.
对称加密:只有一个密钥,加密数据和解密数据时都用它.打个比方,跟我们平时开门的门锁一样,关门开门都用的一个锁匙.密钥就相当于是钥匙.在代码中其实就相当于是传给函数的一个参数.
非对称加密:有两个密钥,一个公钥,一个私钥.相当于我们锁门用一个钥匙,开门的时候要用另外一个钥匙.

对于对称加密我们可能较容易理解,反正只要一个密钥,写代码时就是弄一个变量,然后加密的函数用这个变量做参数,解密函数也用它做参数.
非对称加密就稍微难理解点,它不一般不是用在同一个程序中.而用于不同的程序间传数据.假如有这样一个场景,你在某网站上输入一个密码,然后要传到服务器去验证.那密码在传输过程中不安全,假如被人截取了可咋整啊,这时你就会想到把密码加密.这样人家截取到了也看不懂.这时不能用对称加密,因为就一个密钥,只你客户端程序知道它并用它加密,但服务器那边不知道,你想到传送密码过去时把密钥也传过去,这样就同样不安全,也怕被截取.于是非对称加密闪亮登场了.
首先服务器那端通过某个算法生成一对密钥匙,一个公钥A,一个私钥B.这样A加密后的东西用B可以解密,B加密的东西用A可以解密.所谓公钥自然是公开的,大家都知道.这样所有人都可以用公钥去加密,而私钥只要服务器知道,别人不会知道,所以你就安全了.那有人会问能不能通过公钥A算出B,理论上自然是能的,不然也不存在破解密码那一说了.只是难度可能比较大.这主要是一些数学算法不太容易逆推,这就涉及些数学的理论了啊.

算法的具体实现我们不管了,.net的一些系统函数给我们完成了那些工作,我们只要去调用就行.
using System.Text; www.2cto.com
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

Tags:

C#编程,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/140/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)