zoukankan      html  css  js  c++  java
  • AES加密

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

    不进则退、与时俱进
  • 相关阅读:
    zabbix学习笔记----概念----2019.03.25
    用深信服AC控制方位话机注册链路的开、关
    方位话机冗余线路注册问题测试过程
    执行python文件报错SyntaxError: Non-ASCII character 'xe8' in file, but no encoding declared
    centos 7.4安装python3.7.4
    zabbix基础使用--添加ping监控
    snmp监控f5
    FortiGate 服务License注册步骤
    centos 7.4安装zabbix 3
    安装centos 6.7&7.4
  • 原文地址:https://www.cnblogs.com/wenrenhua08/p/3993654.html
Copyright © 2011-2022 走看看