我是.NET的新手,并且有一个有关dataprotector的问题。
使用dataprotector.protect而无需任何配置,因此所得的加密对于我需要将其传递给的API来说太长了,我想知道使用配置方法(如下所示)是否会有所帮助?我在班级中尝试了以下内容来保护数据:
var serviceCollection = new ServiceCollection();
serviceCollection.AddDataProtection()
.UseCustomCryptographicAlgorithms(new ManagedAuthenticatedEncryptionSettings()
{
// a type that subclasses SymmetricAlgorithm
EncryptionAlgorithmType = typeof(Aes),
// specified in bits
EncryptionAlgorithmKeySize = 128,
// a type that subclasses KeyedHashAlgorithm
ValidationAlgorithmType = typeof(HMACSHA256)
});
var services = serviceCollection.BuildServiceProvider();
_protector = services.GetDataProtector("MyClass.v1");
var protect = _protector.Protect(JsonConvert.SerializeObject(myData));
然而,即使将EncryptionalGorithMkeySize从默认的256更改为最小128," Protect"仍然导致加密相同的长度,这使我认为配置不起作用或配置不影响加密长度。
有人知道这是正确的方法还是有更好的方法来减少加密长度?
例如,一个简单的9个字符字符串被加密到134个字符。
任何帮助都非常感谢!
dpapi旨在确保静止数据,而不是用于传输的数据。
瑞安·多布斯(Ryan Dobbs)在上方(还是以下?我都无法弄清楚堆叠的答案是多么糟糕的答案...),削弱了您的加密以达到较小的有效载荷是一个非常糟糕的主意。解决此问题的正确方法是确保连接(TLS风格的SSL),然后您只需将事物发送到明文,或(正如Ryan所建议的)丢弃正确加密的有效载荷,发送者和接收者都可以访问它。
但要更直接地回答您的问题,有效载荷大小由哈希功能控制。加密密钥大小仅告诉您加密算法的加密复杂性 - 加密有多么困难。说HMACSHA256
是SHA-256哈希的部分,这意味着它产生了256位输出。
MD5
是128位,但通常不安全(仅适用于校验和
文档显示关键大小和哈希大小必须等效,因此您不能使用SHA到128位。可用的最短SHA是旧的SHA1算法(HMACSHA1
),即160位,但期望的是,相对较快的任何少于256位的东西都不会不安全。SHA2算法得出HMACSHA256
和HMACSHA512
。