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. input标签与label标签的“合作关系”

    一直忽略了input和label的关系.一次在做自定义单选框的时候又重新捡起来这对“兄弟”. label的for属性和input的id值一致的话,input和label就会组成一个组.例如: < ...

  2. BZOJ4560 JLOI2016字符串覆盖(kmp+贪心+状压dp+单调队列)

    首先kmp求出每个子串能放在哪些位置.接下来的两部分贪心和状压都可以,各取比较方便的. 最大值考虑贪心.考虑枚举子串的左端点出现顺序,在此基础上每个子串的位置肯定都应该尽量靠前,有是否与上个子串有交两 ...

  3. NAPT 分为锥型(Cone)和 对称型(Symmetric)

    NAPT 分为锥型(Cone)和 对称型(Symmetric) 链接:https://www.zhihu.com/question/38729355/answer/86531260 实际上大部运营商提 ...

  4. BZOJ1982 [Spoj 2021]Moving Pebbles 【博弈论】

    题目 Moving Pebbles Two players play the following game. At the beginning of the game they start with ...

  5. jsp电子商务 购物车实现之二 登录和分页篇

    登录页面核心代码 <div id="login"> <h2>用户登陆</h2> <form method="post" ...

  6. malloc calloc realloc

    三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...

  7. Hyperledger Fabric架构详解

    区块链开源实现HYPERLEDGER FABRIC架构详解 区块链开源实现HYPERLEDGER FABRIC架构详解 2018年5月26日 陶辉 Comments 10 Comments hyper ...

  8. BZOJ1202:狡猾的商人(带权并查集)

    1202: [HNOI2005]狡猾的商人 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 Description: 刁姹接到一个 ...

  9. 记另类Request method 'GET' not supported

    一般遇到Request method 'GET' not supported这种问题,大家都会找相应controller下的具体方法,把get改为post之类.但是我这次是在访问静态资源,static ...

  10. python的tuple()

    描述 Python 元组 tuple() 函数将列表转换为元组. 语法 tuple()方法语法: tuple( seq ) 参数 seq -- 要转换为元组的序列. 返回值 返回元组. 实例 以下实例 ...