在C#

时间:2019-03-14 15:15:14

标签: c# encryption aes

我需要一种确定性的加密算法,我可以将其用于社会安全号码,并将其存储在MongoDB中,并且需要能够进行搜索。

我想出的是使用AES,但有目的地使用不变的IV进行扫描。我只想确保我不会完全破坏加密,而只是做我需要做的才能启用搜索。

总而言之,如果您获得了按如下所示加密的SSN的数据库转储,您是否可以通过某种攻击获得明文,而无需了解IV和密钥?如果我通过IV(而不是对其进行硬编码)作为第二个键会有所帮助吗?

这是我的other question

的后续活动
public class DeterministicAes
{
    //random 16 byte iv
    private static readonly string DeterministicIv = "YO9FhYEIpGd28mJNupCjvg==";

    public static string SimpleEncryptWithPassword(string secretMessage, string password)
    {
        if (String.IsNullOrEmpty(secretMessage))
            throw new ArgumentException("Secret Message Required!", "secretMessage");
        var key = Convert.FromBase64String(password);
        var iv = Convert.FromBase64String(DeterministicIv);
        var cipherText = EncryptStringToBytes_Aes(secretMessage, key, iv);
        return Convert.ToBase64String(cipherText);
    }

    public static string SimpleDecryptWithPassword(string cipherText, string password)
    {
        if (String.IsNullOrEmpty(cipherText))
            throw new ArgumentException("Secret Message Required!", "cipherText");
        var cipherTextBytes = Convert.FromBase64String(cipherText);
        var key = Convert.FromBase64String(password);
        var iv = Convert.FromBase64String(DeterministicIv);
        return DecryptStringFromBytes_Aes(cipherTextBytes, key, iv);
    }

    //Credit: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=netframework-4.7.2#examples
    static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) {}

    static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV) {}
}

1 个答案:

答案 0 :(得分:0)

按照建议AES-SIV去了Crypto sub-site