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

    不进则退、与时俱进
  • 相关阅读:
    python使用阿里云oss-sdk
    flask-文件上传的使用
    flask-migrate的基本使用
    flask-script的基本使用
    flask-sqlalchemy的基本使用
    alembic的常用参数
    sqlchemy查询的其他操作
    orm层面的删除的注意事项
    C#获取数据库中的Instance
    SOA Demo
  • 原文地址:https://www.cnblogs.com/wenrenhua08/p/3993654.html
Copyright © 2011-2022 走看看