C#使用Des加密

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C#进行DES加密和解密的代码示例: ```csharp using System; using System.Security.Cryptography; using System.Text; public class DESExample { public static string Encrypt(string plainText, byte[] key, byte[] iv) { byte[] encrypted; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = key; des.IV = iv; ICryptoTransform encryptor = des.CreateEncryptor(des.Key, des.IV); using (var memoryStream = new System.IO.MemoryStream()) { using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { using (var streamWriter = new System.IO.StreamWriter(cryptoStream)) { streamWriter.Write(plainText); } encrypted = memoryStream.ToArray(); } } } return Convert.ToBase64String(encrypted); } public static string Decrypt(string cipherText, byte[] key, byte[] iv) { byte[] decrypted; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = key; des.IV = iv; ICryptoTransform decryptor = des.CreateDecryptor(des.Key, des.IV); using (var memoryStream = new System.IO.MemoryStream(Convert.FromBase64String(cipherText))) { using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) { using (var streamReader = new System.IO.StreamReader(cryptoStream)) { decrypted = Encoding.UTF8.GetBytes(streamReader.ReadToEnd()); } } } } return Encoding.UTF8.GetString(decrypted); } } ``` 使用示例: ```csharp byte[] key = Encoding.UTF8.GetBytes("01234567"); byte[] iv = Encoding.UTF8.GetBytes("abcdefgh"); string plainText = "Hello, World!"; string encryptedText = DESExample.Encrypt(plainText, key, iv); Console.WriteLine($"Encrypted: {encryptedText}"); string decryptedText = DESExample.Decrypt(encryptedText, key, iv); Console.WriteLine($"Decrypted: {decryptedText}"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值