我对.net很新,并对DataProtector有疑问。
在没有任何配置的情况下使用DataProtector.Protect时,生成的加密对于我需要传递给它的API来说太长了,我想知道使用配置方法(如here所示)是否有帮助?我在需要保护数据的类中尝试了以下内容:
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,'保护'仍然导致相同长度的加密,这使我认为配置不起作用或配置不会影响加密长度。
有没有人知道这是以正确的方式完成还是有更好的方法来减少加密长度?
例如,一个简单的9个字符的字符串被加密为134个字符。
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
DPAPI旨在保护静态数据,而不是传输数据。
Ryan Dobbs是正确的,高于(或低于?我无法弄清楚StackOverflow如何排序未接受的答案......),削弱加密以获得更小的有效载荷是一个非常糟糕的主意。解决这个问题的正确方法是保护连接(TLS风格的SSL),然后你就可以发送纯文本,或者(正如Ryan建议的那样)在发送者和接收者可以访问它的地方丢弃正确加密的有效载荷。
但是为了更直接地回答你的问题,有效载荷大小由散列函数控制。加密密钥大小仅告诉您加密算法的加密复杂性 - 加密的破坏程度。说HMACSHA256
的部分是SHA-256哈希,这意味着它产生256位输出。
MD5
是128位,但它通常不安全(仅适用于校验和)。
文档说密钥大小和散列大小必须相等,因此您不能使用SHA转到128位。可用的最短SHA是旧的SHA1算法(HMACSHA1
),它是160位,但期望是任何小于256位的算法都会相对较快地不安全。 SHA2算法产生HMACSHA256
和HMACSHA512
。