我需要一种确定性的加密算法,我可以将其用于社会安全号码,并将其存储在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) {}
}