新建 文本文档 (4).txt

来自「DES是Data Encryption Standard(数据加密标准)的缩写。」· 文本 代码 · 共 104 行

TXT
104
字号
C#实现DES加密解密


DES算法描述简介:

DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准;它是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8 位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变.

/// <summary>
??/// DES加密
??/// </summary>
??/// <param name="Data">被加密的明文</param>
??/// <param name="Key">密钥</param>
??/// <param name="Vector">向量</param>
??/// <returns>密文</returns>
??public static Byte[] DESEncrypt(Byte[] Data, String Key, String Vector)
??{
?? Byte[] bKey = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
?? Byte[] bVector = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

?? Byte[] Cryptograph = null; // 加密后的密文

?? DESCryptoServiceProvider EncryptProvider = new DESCryptoServiceProvider();
?? EncryptProvider.Mode = CipherMode.CBC;
?? EncryptProvider.Padding = PaddingMode.Zeros;

?? try
?? {
????// 开辟一块内存流
????using (MemoryStream Memory = new MemoryStream())
????{
???? // 把内存流对象包装成加密流对象
???? using (CryptoStream Encryptor = new CryptoStream(Memory,
???? EncryptProvider.CreateEncryptor(bKey, bVector),
???? CryptoStreamMode.Write))
???? {
??????// 明文数据写入加密流
??????Encryptor.Write(Data, 0, Data.Length);
??????Encryptor.FlushFinalBlock();

??????Cryptograph = Memory.ToArray();
???? }
????}
?? }
?? catch
?? {
????Cryptograph = null;
?? }

?? return Cryptograph;
??}

??/// <summary>
??/// DES解密
??/// </summary>
??/// <param name="Data">被解密的密文</param>
??/// <param name="Key">密钥</param>
??/// <param name="Vector">向量</param>
??/// <returns>明文</returns>
??public static Byte[] DESDecrypt(Byte[] Data, String Key, String Vector)
??{
?? Byte[] bKey = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
?? Byte[] bVector = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

?? Byte[] original = null;

?? DESCryptoServiceProvider CryptoProvider = new DESCryptoServiceProvider();
?? CryptoProvider.Mode = CipherMode.CBC;
?? CryptoProvider.Padding = PaddingMode.Zeros;

?? try
?? {
????// 开辟一块内存流,存储密文
????using (MemoryStream Memory = new MemoryStream(Data))
????{
???? // 把内存流对象包装成加密流对象
???? using (CryptoStream Decryptor = new CryptoStream(Memory,
???? CryptoProvider.CreateDecryptor(bKey, bVector),
???? CryptoStreamMode.Read))
???? {
??????// 明文存储区
??????using (MemoryStream originalMemory = new MemoryStream())
??????{
?????? Byte[] Buffer = new Byte[1024];
?????? Int32 readBytes = 0;
?????? while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
?????? {
????????originalMemory.Write(Buffer, 0, readBytes);
?????? }

?????? original = originalMemory.ToArray();
??????}
???? }
????}
?? }
?? catch
?? {
????original = null;
?? }

?? return original;
??}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?