问题描述: 在使用ASP.NET对字符串进行对称加密时,获取到的值为System.IO.MemoryStream而不是加密后的名称。
解决方法: 这个问题通常是因为未正确使用加密算法或未正确处理加密结果导致的。下面是一个示例代码,演示了如何正确地对字符串进行对称加密,并获取到加密后的结果。
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Program
{
public static void Main()
{
string plaintext = "Hello World";
string key = "this-is-a-secret-key";
string iv = "this-is-an-initialization-vector";
string encryptedText = EncryptString(plaintext, key, iv);
Console.WriteLine("Encrypted Text: " + encryptedText);
string decryptedText = DecryptString(encryptedText, key, iv);
Console.WriteLine("Decrypted Text: " + decryptedText);
}
public static string EncryptString(string plaintext, string key, string iv)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes(iv);
using (Aes aes = Aes.Create())
{
aes.Key = keyBytes;
aes.IV = ivBytes;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
byte[] plainBytes = Encoding.UTF8.GetBytes(plaintext);
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
cryptoStream.FlushFinalBlock();
}
byte[] encryptedBytes = memoryStream.ToArray();
return Convert.ToBase64String(encryptedBytes);
}
}
}
public static string DecryptString(string encryptedText, string key, string iv)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes(iv);
byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
using (Aes aes = Aes.Create())
{
aes.Key = keyBytes;
aes.IV = ivBytes;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream memoryStream = new MemoryStream(encryptedBytes))
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
using (StreamReader streamReader = new StreamReader(cryptoStream))
{
return streamReader.ReadToEnd();
}
}
}
}
}
}
在这个示例中,我们使用了AES对称加密算法来对字符串进行加密和解密。加密过程中,我们使用CryptoStream将加密结果写入MemoryStream,并将其转换为Base64字符串进行返回。解密过程中,我们将加密后的Base64字符串转换为字节数组,然后使用CryptoStream从MemoryStream中读取解密结果。
请确保在实际使用时,将key和iv的值替换为您自己的安全密钥和初始化向量。