zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#实现对AES加密和解密的方法

2023-06-13 09:14:51 时间

AES简介

AES(TheAdvancedEncryptionStandard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。

AES是一个新的可以用于保护电子数据的加密算法。明确地说,AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。以下是我经过整理的代码,希望对大家有所帮助:

复制代码代码如下:


///<summary>
///ASE加解密
///</summary>
publicclassAESHelper
{
   ///<summary>
   ///获取密钥
   ///</summary>
   privatestaticstringKey
   {
       get
       {
           return"abcdef1234567890";   ////必须是16位
       }
   }

   //默认密钥向量
   privatestaticbyte[]_key1={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF,0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};

   ///<summary>
   ///AES加密算法
   ///</summary>
   ///<paramname="plainText">明文字符串</param>
   ///<returns>将加密后的密文转换为Base64编码,以便显示</returns>
   publicstaticstringAESEncrypt(stringplainText)
   {
       //分组加密算法
       SymmetricAlgorithmdes=Rijndael.Create();
       byte[]inputByteArray=Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组
       //设置密钥及密钥向量
       des.Key=Encoding.UTF8.GetBytes(Key);
       des.IV=_key1;
       byte[]cipherBytes=null;
       using(MemoryStreamms=newMemoryStream())
       {
           using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write))
           {
               cs.Write(inputByteArray,0,inputByteArray.Length);
               cs.FlushFinalBlock();
               cipherBytes=ms.ToArray();//得到加密后的字节数组
               cs.Close();
               ms.Close();
           }
       }
       returnConvert.ToBase64String(cipherBytes);
   }

   ///<summary>
   ///AES解密
   ///</summary>
   ///<paramname="cipherText">密文字符串</param>
   ///<returns>返回解密后的明文字符串</returns>
   publicstaticstringAESDecrypt(stringshowText)
   {
       byte[]cipherText=Convert.FromBase64String(showText);

       SymmetricAlgorithmdes=Rijndael.Create();
       des.Key=Encoding.UTF8.GetBytes(Key);
       des.IV=_key1;
       byte[]decryptBytes=newbyte[cipherText.Length];
       using(MemoryStreamms=newMemoryStream(cipherText))
       {
           using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Read))
           {
               cs.Read(decryptBytes,0,decryptBytes.Length);
               cs.Close();
               ms.Close();
           }
       }
       returnEncoding.UTF8.GetString(decryptBytes).Replace("\0","");  ///将字符串后尾的"\0"去掉
   }
}


Key的值可以放在config文件中,也可放入数据库中。