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. RDMA

    什么是RDMA? 来源 https://blog.csdn.net/u011459120/article/details/78469098 1. 概述 RDMA是Remote Direct Memor ...

  2. Angular 监听路由变化

    var app = angular.module('Mywind',['ui.router']) //Angular 监听路由变化 function run($ionicPlatform, $loca ...

  3. [CF816E] Karen and Supermarket1 [树形dp]

    传送门 - > \(CF816E\) Karen and Supermarket 题意翻译 在回家的路上,凯伦决定到超市停下来买一些杂货. 她需要买很多东西,但因为她是学生,所以她的预算仍然很有 ...

  4. Codeforces Round #524 (Div. 2) B. Margarite and the best present

    B. Margarite and the best present 题目链接:https://codeforces.com/contest/1080/problem/B 题意: 给出一个数列:an=( ...

  5. Codeforces Round #478 C. Valhalla Siege

    C. Valhalla Siege time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. js操作div的显隐

    <!DOCTYPE html><html> <head> <title> new document </title> <meta ht ...

  7. 【转载】惊天大悲剧-Hadoop的rmr和trash

    转自:http://java-doom.iteye.com/blog/1898000 这两天在操作Hadoop集群时,由于一个误操作,制作了一个天大的悲剧 不小心把Hadoop集群上的所有文件全部删除 ...

  8. vivo面试学习1(io和nio)

    一.io流(一次从open到底层的操作) 输入和输出流 IO流 字节流 Reader.Writer 字符流 InputStream.OutputStream 字节流:可以处理所有bit为单位存储的文件 ...

  9. Posted和Non-Posted传送方式

    PCI总线规定了两类数据传送方式,分别是Posted和Non-Posted数据传送方式.其中使用Posted数据传送方式的总线事务也被称为Posted总线事务:而使用Non-Posted数据传送方式的 ...

  10. 如何打开小米,oppo,华为等手机的系统应用的指定页面

    如题,拿Oppo 手机做个示例,小米 华为也是如此. 在编写Android应用的时候,我们经常会有这样的需求,我们想直接打开系统应用的某个页面.比如在Oppo R9 手机上我们想打开某个应用的通知管理 ...