C#实现DES加密解密,AES加密解密

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

时间: 2024-08-06 04:49:39

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

对称加密之---AES加密

工作中常会需要让数据传输前进行加密处理.这次用到的是AES加密.AES加密中,需要注意到坑还是挺多的.对AES也进行了一番了解,发现里面的东西真的是注意的太多了.今天只是整理了一种简单的加密格式,工作中使用肯定是够了,想要了解根深的AES加密还是需要再找些资料学习一下. 首先需要下载python的第三库Crypto:pip install Crypto #!/usr/bin/env python # -*- coding: utf-8 -*- from Crypto.Cipher import

信息安全-加密:AES 加密

ylbtech-信息安全-加密:AES 加密 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的

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

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现不同平台下加密算法的一致性. 只是话说起来,DES算法是在1976年被美国的国家标准局定为联邦资料的加密标准的,到如今已经接近40年了.我们都知道.在计算机的世界里有一个摩尔定律.就是每过18个月.计算机的晶体管的数量就会翻一番,相应的计算速度也会翻倍,尽管如今的发展速度有所放缓,可是每过三年左右,

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

最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2

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

思路:使用随机向量,把随机向量放入密文中,每次解密时从密文中截取前16位,其实就是我们之前加密的随机向量. 代码 public static string Encrypt(string plainText, string AESKey) { RijndaelManaged rijndaelCipher = new RijndaelManaged(); byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组 r

用Java实现AES加密(转)

一)什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. 那么为什么原来的DES会被取代呢,,原因就在于其使用56位密钥,比较容易被破解.而AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据,相对来说安全很多.完善的加密算法在理论上是无法破解的,除非使用穷尽法.使用穷尽法破解密钥长度在128位以上的加密数据是不现实的,仅存在理论

AES加密方式

项目中也经常使用加密方式,Base64加密,AES加密,下面记录下使用AES加密方式 package com.czb; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Encoder; public class Test { public static void main(String[] args) t

Java MD5,base64,AES加密工具类

import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.regex.Matcher; import java.util.regex.Pat

利用php的mcrypt模块加密解密(AES、DES等等)

php des加密: $cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表 $mode_list = mcrypt_list_modes();//mcrypt支持的加密模式列表 // print_r($cipher_list); // print_r($mode_list); function encrypt($key,$data){ $td = mcrypt_module_open("des", "",