我正在使用KeyVaultClient在密钥库中添加新机密。当添加较小的秘密值时,它可以完美工作。当我们添加一个不接受该值的长秘密值系统时,响应得到“操作返回了无效的状态码'BadRequest'”。
代码-
var kv = new KeyVaultClient(AuthHelper.GetToken);
var key = kv.GetKeyAsync("https://xxxxxxx.vault.azure.net/", "Key1").GetAwaiter().GetResult();
var byteData = Encoding.Unicode.GetBytes("long data...........");//here long secret value
var encryptData = kv.EncryptAsync("https://xxxxxx.vault.azure.net/keys/Key123/98888xxxxxxxxxxxxx", JsonWebKeyEncryptionAlgorithm.RSAOAEP, byteData).GetAwaiter().GetResult();
在kv.EncryptAsync中获取异常。
我注意到,当添加较小的秘密值时,没有错误。是否存在秘密值字符限制?如何处理这些限制?
答案 0 :(得分:1)
很可能您会因为长值(而不是短值)而出现异常,因为您超出了可以使用密钥和所选算法加密的最大消息长度。
解决此问题的一种方法可能是使用具有相同算法的较长密钥,或者着眼于更改密钥长度和算法的组合。 (以下详细信息)
一个明显的问题是您可以加密的最大长度是多少。微软的文档,
简单地陈述这样的事情
请注意,ENCRYPT操作仅支持单个数据块, 其大小取决于目标密钥和要使用的加密算法。
在代码中,您选择了JsonWebKeyEncryptionAlgorithm.RSAOAEP
作为算法和密钥长度,当您将代码指向库中的密钥之一时,您就会知道。
再次,查看有关使用此算法的Microsoft文档 RSA-OEAP Encrypt/Decrypt
现在,
您可以在RFC 3447中阅读更多详细信息。搜索“ A.2.1 RSAES-OAEP”
根据detailed crypto.stackexchange post
做一些数学运算免责声明:您的情况将是这样的(我不是该主题的专家,因此可能适用的精确计算可能会出错,但是您将遵循有关密钥长度和算法的核心思想)到此为止将影响最大消息大小:))
SHA-1表示输出大小为160,即hlen = 20
假设您现在使用的密钥长度为1024(可以根据密钥大小来更改此长度)。
mLen = 1024 / 8 - 2 * 160 / 8 - 2 = 86
如果您使用的密钥长度为2048
mLen = 2048 / 8 - 2 * 160 / 8 - 2 = 214
希望所有的说明/链接都使您对该重要语句的工作方式有所了解-最大长度/大小取决于要使用的目标密钥和加密算法。
答案 1 :(得分:0)
是否存在秘密值字符限制?如何处理这些限制?
Azure Key Vault中的秘密是八位字节序列,每个最大大小为25k字节。
Azure Key Vault还支持密钥的contentType字段。客户端可以指定秘密的内容类型contentType
,以帮助在检索秘密数据时解释该秘密数据。 此字段的最大长度为255个字符。没有预定义的值。建议的用法是解释机密数据的提示。
有关更多详细信息,您可以参考此article。