c# - 使用 C# 和 SymmetricAlgorithm 进行真正简单的加密

标签 c# encryption encryption-symmetric des

我正在寻找一种非常简单的加密/解密方法。我将始终使用相同的静态 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/

相关文章:

c# - 无法将参数值从字符串转换为 Int32

c# - 将类添加到当前程序集中

c# - 使用 Linq to SQL 进行单元测试实践

linux - SSL 库错误 : error: SSL routines:ssl3_get_client_hello:no shared cipher - Too restrictive SSLCipherSuite or using DSA server certificate

java - 将 TripleDES 算法从 .Net 应用于 Java 时出错

c# - 路线 VS 路线基地

javascript - CryptoJS AES 模式总是以 = 结尾

java - DES 加密明文与密码长度

java - 使用DES在java中使用私钥而不自动生成 key

perl - 使用对称加密的Perl中的安全非篡改URL组件?