我正在寻找一种非常简单的加密/解密方法。我将始终使用相同的静态 key 。我知道这种方法的风险。目前我正在使用以下代码,但在加密和解密相同的字符串后它不会生成相同的结果(字符串中间有一些垃圾)。
public static string Crypt(this string text)
{
string result = null;
if (!String.IsNullOrEmpty(text))
{
byte[] plaintextBytes = Encoding.Unicode.GetBytes(text);
SymmetricAlgorithm symmetricAlgorithm = DES.Create();
symmetricAlgorithm.Key = new byte[8] {1, 2, 3, 4, 5, 6, 7, 8};
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, symmetricAlgorithm.CreateEncryptor(), CryptoStreamMode.Write))
{
cryptoStream.Write(plaintextBytes, 0, plaintextBytes.Length);
}
result = Encoding.Unicode.GetString(memoryStream.ToArray());
}
}
return result;
}
public static string Decrypt(this string text)
{
string result = null;
if (!String.IsNullOrEmpty(text))
{
byte[] encryptedBytes = Encoding.Unicode.GetBytes(text);
SymmetricAlgorithm symmetricAlgorithm = DES.Create();
symmetricAlgorithm.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream memoryStream = new MemoryStream(encryptedBytes))
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, symmetricAlgorithm.CreateDecryptor(), CryptoStreamMode.Read))
{
byte[] decryptedBytes = new byte[encryptedBytes.Length];
cryptoStream.Read(decryptedBytes, 0, decryptedBytes.Length);
result = Encoding.Unicode.GetString(decryptedBytes);
}
}
}
return result;
}
我可以根据需要更改任何内容,没有限制(但我只想使用一种方法进行加密,另一种方法进行解密,而无需在它们之间共享变量)。
谢谢。
最佳答案
如果您不想自己处理 key ,那么让操作系统为您处理。例如。使用 Windows Data Protection (DPAPI)。
您可以编写自己的、基于字符串
的System.Security.Cryptography.ProtectedData.Protect
版本和 Unprotect
通过使用类似的方法:
public static string Crypt (this string text)
{
return Convert.ToBase64String (
ProtectedData.Protect (
Encoding.Unicode.GetBytes (text) ) );
}
public static string Decrypt (this string text)
{
return Encoding.Unicode.GetString (
ProtectedData.Unprotect (
Convert.FromBase64String (text) ) );
}
关于c# - 使用 C# 和 SymmetricAlgorithm 进行真正简单的加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9031537/