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;
   }

AES算法描述简介:

DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES。经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍。

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

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

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

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

return Cryptograph;
   }

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

Byte[] original = null; // 解密后的明文

Rijndael Aes = Rijndael.Create();
   try
   {
     // 开辟一块内存流,存储密文
     using (MemoryStream Memory = new MemoryStream(Data))
     {
     // 把内存流对象包装成加密流对象
     using (CryptoStream Decryptor = new CryptoStream(Memory,
     Aes.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;
   }

C#实现DES加密解密,AES加密解密的更多相关文章

  1. 对称加密之---AES加密

    工作中常会需要让数据传输前进行加密处理.这次用到的是AES加密.AES加密中,需要注意到坑还是挺多的.对AES也进行了一番了解,发现里面的东西真的是注意的太多了.今天只是整理了一种简单的加密格式,工作 ...

  2. 信息安全-加密:AES 加密

    ylbtech-信息安全-加密:AES 加密 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一 ...

  3. c#RSA的SHA1加密与AES加密、解密

    前言:公司项目对接了一个对数据保密性要求较高的java公司.api接口逻辑是这样的:他们提供 SHA1私钥 与 AES的秘钥.我们需要将 传递查询参数 通过SHA1 私钥加密再转换成 十六进制 字符串 ...

  4. 【Android工具】DES终结者加密时报——AES加密演算法

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...

  5. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

  6. 对称加密之AES加密详解

    最近有人问我AES对称加密是啥,我回答了个大概,发现自己不能清晰的讲出来,特此记录,以供学习 一.对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decrypti ...

  7. C#对称加密(AES加密)每次生成的密文结果不同思路代码分享

    思路:使用随机向量,把随机向量放入密文中,每次解密时从密文中截取前16位,其实就是我们之前加密的随机向量. 代码 public static string Encrypt(string plainTe ...

  8. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

    本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1.  摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...

  9. 探讨数据进行AES加密和解密以及.NET Core对加密和解密为我们提供了什么?

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

随机推荐

  1. PAT 1045 快速排序

    https://pintia.cn/problem-sets/994805260223102976/problems/994805278589960192 著名的快速排序算法里有一个经典的划分过程:我 ...

  2. 如何在MyEclipse下查看JDK源代码

    在MyEclipse中查看JDK类库的源代码~ 设置: 1.点 "window"-> "Preferences" -> "Java&quo ...

  3. AndroidStudio3.0 注解报错Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor.

    体验最新版AndroidStudio3.0 Canary 8的时候,发现之前项目的butter knife报错,用到注解的应该都会报错 Error:Execution failed for task ...

  4. mongo db 使用方法[转]

    1 下载 mogodb http://www.mongodb.org/display/DOCS/Downloads 2 打开服务 我安装在e盘下了 可以指定数据文件位置 到 E:\mongoDB\mo ...

  5. hdu 3500 Fling (dfs)

    Fling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submi ...

  6. [CF912B]New Year's Eve

    题意:在1~n中选不超过m个数,求其异或最大值 题解:经过找规律发现如果m为1,输出n,不然输出最小的不超过n的2^k-1 C++ Code: #include<cstdio> using ...

  7. [Leetcode] Add two numbers 两数之和

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  8. HDU 多校对抗赛 B Balanced Sequence

    Balanced Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. lwIP配置文件opt.h和lwipopts.h

    如何去配置lwip,使它去适合不同大小的脚,这就是lwIP的配置问题.尤其是内存的配置,配置多了浪费,配置少了跑不了或者不稳定(会出现的一大堆莫名奇妙的问题,什么打开网页的速度很慢啊?什么丢包啊,什么 ...

  10. 7月24号day16总结

    一开始显示出现问题,js路径不能应用,因为用的是springMVC框架书写,所以有路径的保护和静态引用地址时需要注意的地方 今天进行了最后项目的优化,包括map清洗数据部分的代码和echarts显示的 ...