当前位置:首页 > 行业动态 > 正文

ASP.NET中文字符的加密解密技术实现疑问

在ASP.NET中,可以使用AES加密算法对中文汉字进行加密和解密。以下是一个简单的示例代码:“ csharp,using System;,using System.IO;,using System.Security.Cryptography;,using System.Text;public class AesEncryption,{, private static readonly string Key = "your-encryption-key"; // 32 bytes key for AES-256, private static readonly string IV = "your-initialization-vector"; // 16 bytes IV public static string Encrypt(string plainText), {, using (Aes aesAlg = Aes.Create()), {, aesAlg.Key = Encoding.UTF8.GetBytes(Key);, aesAlg.IV = Encoding.UTF8.GetBytes(IV);, ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()), {, using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)), {, using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)), {, swEncrypt.Write(plainText);, }, return Convert.ToBase64String(msEncrypt.ToArray());, }, }, }, } public static string Decrypt(string cipherText), {, using (Aes aesAlg = Aes.Create()), {, aesAlg.Key = Encoding.UTF8.GetBytes(Key);, aesAlg.IV = Encoding.UTF8.GetBytes(IV);, ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText))), {, using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)), {, using (StreamReader srDecrypt = new StreamReader(csDecrypt)), {, return srDecrypt.ReadToEnd();, }, }, }, }, },},` 这个代码示例展示了如何使用AES算法对中文汉字进行加密和解密。请确保Key IV`的长度符合AES的要求(分别为32字节和16字节)。

在ASP.NET中,对中文汉字进行加密和解密是一个常见需求,尤其在处理敏感信息时,下面将详细介绍如何在ASP.NET中实现中文汉字的加密与解密,包括对称加密、非对称加密和散列函数等方法,并提供具体的代码示例。

一、加密算法

1、MD5加密:MD5是一种广泛使用的散列函数,可以将任意长度的数据转换为固定长度(32位)的散列值,虽然MD5不适合用于加密(因为其不可逆性),但它常用于验证数据完整性。

代码示例

     string username = "我是陈建勇";
     string md5Hash = FormsAuthentication.HashPasswordForStoringInConfigFile(username, "MD5");
     Response.Write(md5Hash + "<br>");

2、SHA1加密:SHA1是另一种常用的散列函数,产生40位的散列值,与MD5类似,SHA1也主要用于数据完整性验证。

代码示例

     string username1 = FormsAuthentication.HashPasswordForStoringInConfigFile(username, "SHA1");
     Response.Write(username1 + "<br>");

3、Base64编码:Base64是一种简单的编码方式,将二进制数据转换为ASCII字符串,它不是真正的加密方法,但常用于在文本中存储或传输二进制数据。

代码示例

     string s = "我是陈建勇";
     byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
     string base64Encoded = Convert.ToBase64String(bytes);
     Response.Write(base64Encoded + "<br>");

4、URL编码:URL编码是将字符串转换为互联网上安全传输的格式,它不提供安全性,但常用于处理URL中的中文字符。

代码示例

     string myname = "陈建勇";
     string urlEncoded = System.Web.HttpUtility.UrlEncode(myname, System.Text.Encoding.UTF8);
     Response.Write(urlEncoded + "<br>");

二、解密算法

1、Base64解码:与Base64编码相对应,Base64解码将编码后的字符串转换回原始二进制数据。

代码示例

     byte[] bytes1 = Convert.FromBase64String(base64Encoded);
     string decodedStr = System.Text.Encoding.UTF8.GetString(bytes1);
     Response.Write(decodedStr + "<br>");

2、URL解码:URL解码将URL编码后的字符串转换回原始格式。

代码示例

     string decodedName = System.Web.HttpUtility.UrlDecode(urlEncoded, System.Text.Encoding.UTF8);
     Response.Write(decodedName);

三、高级加密方法

1、对称加密:使用相同的密钥进行加密和解密,常见的对称加密算法包括AES、DES等。

代码示例

     // 配置web.config或app.config中的IV和Key
     // <add key="IV" value="SuFjcEmp/TE="/>
     // <add key="Key" value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/>
     public class CryptoHelper
     {
         private readonly string IV;
         private readonly string Key;
         public CryptoHelper()
         {
             IV = ConfigurationManager.AppSettings["IV"];
             Key = ConfigurationManager.AppSettings["Key"];
         }
         private TripleDESCryptoServiceProvider GetCryptoProvider()
         {
             TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();
             provider.IV = Convert.FromBase64String(IV);
             provider.Key = Convert.FromBase64String(Key);
             return provider;
         }
         public string GetEncryptedValue(string inputValue)
         {
             TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
             MemoryStream mStream = new MemoryStream();
             CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(), CryptoStreamMode.Write);
             byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);
             cStream.Write(toEncrypt, 0, toEncrypt.Length);
             cStream.FlushFinalBlock();
             byte[] ret = mStream.ToArray();
             cStream.Close();
             mStream.Close();
             return Convert.ToBase64String(ret);
         }
         public string GetDecryptedValue(string inputValue)
         {
             TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
             byte[] inputEquivalent = Convert.FromBase64String(inputValue);
             MemoryStream msDecrypt = new MemoryStream(inputEquivalent);
             CryptoStream csDecrypt = new CryptoStream(msDecrypt, provider.CreateDecryptor(), CryptoStreamMode.Read);
             byte[] fromEncrypt = new byte[inputEquivalent.Length];
             int numRead = csDecrypt.Read(fromEncrypt, 0, inputEquivalent.Length);
             return new UTF8Encoding().GetString(fromEncrypt, 0, numRead);
         }
     }

2、非对称加密:使用一对密钥(公钥和私钥)进行加密和解密,公钥用于加密,私钥用于解密,反之亦然,常见的非对称加密算法包括RSA、ECC等。

代码示例

     // RSA加密示例(简化版)
     using (var rsa = new RSACryptoServiceProvider())
     {
         string publicKey = rsa.ToXmlString(false); // 获取公钥
         string privateKey = rsa.ToXmlString(true);  // 获取私钥
         // 加密
         byte[] dataToEncrypt = System.Text.Encoding.UTF8.GetBytes("我是陈建勇");
         byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false);
         string encryptedString = Convert.ToBase64String(encryptedData);
         Response.Write(encryptedString + "<br>");
         // 解密
         byte[] dataToDecrypt = Convert.FromBase64String(encryptedString);
         byte[] decryptedData = rsa.Decrypt(dataToDecrypt, false);
         string decryptedString = System.Text.Encoding.UTF8.GetString(decryptedData);
         Response.Write(decryptedString);
     }

涵盖了ASP.NET中对中文汉字进行加密和解密的多种方法,从简单的Base64编码到复杂的对称和非对称加密,开发者可以根据实际需求选择合适的加密算法来保护敏感信息的安全性。

0