C#,如何检查值是否使用 MD5 密码加密?

标签 c# encryption

我有以下代码来加密一个值(如下所列)。现在我想写一个 bool isEncrypted() 方法。是否有一种万无一失且可靠的方法来检查值是否已使用此功能加密。我有解密例程并且可以控制密码短语,但不确定这是否有帮助。

原因是 - 当应用首次运行时,配置文件中的值未加密,在这种情况下,应用应自动加密这些值。在第二次运行时,我不想再次加密,因为这显然会造成破坏。最后,我不想将 isEncrypted 属性添加到配置值。我希望它能够工作并且看起来尽可能动态。

到目前为止,我倾向于使用 len (128) 作为决定因素,但未加密的值也有可能是这个长度。

提前致谢。

public static string encrypt(string text)
    {
        // Locals
        var passphrase = "5ab394ed-3920-4932-8d70-9c1b08f4ba4e";
        byte[] results;
        var utf8 = new UTF8Encoding();

        // Step 1. We hash the passphrase using MD5
        // We use the MD5 hash generator as the result is a 128 bit byte array
        // which is a valid length for the TripleDES encoder we use below
        var hashProvider = new MD5CryptoServiceProvider();
        var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passphrase));

        // Step 2. Create a new TripleDESCryptoServiceProvider object
        // Step 3. Setup the encoder
        var tdesAlgorithm = new TripleDESCryptoServiceProvider
        {
            Key = tdesKey,
            Mode = CipherMode.ECB,
            Padding = PaddingMode.PKCS7
        };

        // Step 4. Convert the input string to a byte[]
        var dataToEncrypt = utf8.GetBytes(text);

        // Step 5. Attempt to encrypt the string
        try
        {
            var encryptor = tdesAlgorithm.CreateEncryptor();
            results = encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length);
        }
        finally
        {
            // Clear the TripleDes and Hashprovider services of any sensitive information
            tdesAlgorithm.Clear();
            hashProvider.Clear();
        }

        // Step 6. Return the encrypted string as a base64 encoded string
        return Convert.ToBase64String(results);
    }

最佳答案

您可以在 isEncrypted 方法中执行的操作是尝试解密消息。
由于您使用的是 PKCS7 填充,因此未加密的消息很可能无法解密,因为填充不符合设置的填充模式。

解密会抛出一个异常,在这种情况下你必须捕获它并返回 false。

如果数据符合填充模式,解密将通过(当消息未加密时)的可能性很小。然而,这是最不可能的。

在这种情况下,我会做的是在加密数据中添加某种标志或将一些数据附加到加密消息中,因为我可以在解密时将其删除。这将是最简单的方法。

关于C#,如何检查值是否使用 MD5 密码加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1802801/

相关文章:

javascript - 更改 WebRTC 中的密码

algorithm - 多字符替换密码算法

java - 在不知道长度的情况下从 TcpClient.GetStream() 读取

c# - 为什么我的 C# 基本构造函数没有被调用?

linux - 如何从 bash 脚本加密 zip 文件

encryption - SHA1 或 AES - 在 asp.net 中哪个更好?

c# - System.Threading.Timer 的可扩展性如何?

c# - 每个字典条目都必须有一个关联的键属性

security - 对加密数据进行全文搜索