IV 在 Microsoft.AspNetCore.DataProtection 中使用,默认加密算法 AES-256-CBC
IV used in Microsoft.AspNetCore.DataProtection with default encryption algo AES-256-CBC
我正在使用 Microsoft.AspNetCore.DataProtection
通过默认算法 (AES-256-CBC) 对我的数据进行加密和解密。根据我的发现,我知道给定相同的 IV 和相同的明文,此加密会一次又一次地产生相同的密文。我有一个用例,我需要对我可能已经加密并存储在某个数据库中的纯文本进行数据查找。我没有从数据库获取和解密数据以检查匹配的选项。
代码示例,
public class MyClass
{
IDataProtector dataProtector;
IMyStoreRepository externalStore;
public MyClass(IDataProtectionProvider dataProtectionProvider, IMyStoreRepository externalStore)
{
this.dataProtector = dataProtectionProvider.CreateProtector("somePurposeString");
this.externalStore = externalStore;
}
public string GetOrAddValue(string someKey)
{
string encryptedKey = this.dataProtector.Protect(someKey); // encrypt the given key
if (this.externalStore.KeyExists(encryptedKey) // look up in the external store
{
return this.externalStore.GetValue(encryptedKey); // return the value if match in external store
}
string someValue = "foo-bar-foo-bar";
this.externalStore.Set(encryptedKey, someValue); // setting the value in the external store with encrypted key
return someValue;
}
}
我正在使用大多数默认配置在 Program.cs
中注入与数据保护相关的依赖项。
我的问题是:
- 如果我按照上面的代码使用它,用于加密的 IV 是什么。
- 如果我以上述方式使用它,它会为给定的明文生成相同的密文吗?鉴于主密钥在所有加密和解密过程中都是恒定的。
根据这些 documents,每个 Encrypt
调用至少使用默认设置生成一个单独的密钥和一个随机初始化向量 (IV),即用于有效负载保护的 AES-256-CBC 和 HMACSHA256为了真实性。因此,我们无法生成与给定明文对应的相同密文。
我正在使用 Microsoft.AspNetCore.DataProtection
通过默认算法 (AES-256-CBC) 对我的数据进行加密和解密。根据我的发现,我知道给定相同的 IV 和相同的明文,此加密会一次又一次地产生相同的密文。我有一个用例,我需要对我可能已经加密并存储在某个数据库中的纯文本进行数据查找。我没有从数据库获取和解密数据以检查匹配的选项。
代码示例,
public class MyClass
{
IDataProtector dataProtector;
IMyStoreRepository externalStore;
public MyClass(IDataProtectionProvider dataProtectionProvider, IMyStoreRepository externalStore)
{
this.dataProtector = dataProtectionProvider.CreateProtector("somePurposeString");
this.externalStore = externalStore;
}
public string GetOrAddValue(string someKey)
{
string encryptedKey = this.dataProtector.Protect(someKey); // encrypt the given key
if (this.externalStore.KeyExists(encryptedKey) // look up in the external store
{
return this.externalStore.GetValue(encryptedKey); // return the value if match in external store
}
string someValue = "foo-bar-foo-bar";
this.externalStore.Set(encryptedKey, someValue); // setting the value in the external store with encrypted key
return someValue;
}
}
我正在使用大多数默认配置在 Program.cs
中注入与数据保护相关的依赖项。
我的问题是:
- 如果我按照上面的代码使用它,用于加密的 IV 是什么。
- 如果我以上述方式使用它,它会为给定的明文生成相同的密文吗?鉴于主密钥在所有加密和解密过程中都是恒定的。
根据这些 documents,每个 Encrypt
调用至少使用默认设置生成一个单独的密钥和一个随机初始化向量 (IV),即用于有效负载保护的 AES-256-CBC 和 HMACSHA256为了真实性。因此,我们无法生成与给定明文对应的相同密文。