Cryptography crypto api-块模式加密确定输入字节计数
我正在尝试使用一个公钥加密某个日期,该公钥派生自使用CALG_RSA_KEYX密钥类型生成的交换密钥对。我使用cryptgetkeyparam KP_BLOCKLEN确定块大小为512位。这似乎是我可以输入cryptencrypt的最大字节数,53个字节(424位),我得到的加密长度是64。如何确定可以将多少字节送入cryptencrypt?如果输入超过53个字节,调用将失败。编辑:尽管此响应被OP标记为已接受,请参阅Rasmus Faber响应,因为这是一个更好的响应。24小时后发布,Rasmus的回复纠正了事实错误,特别是错误地将OAEP描述为分组密码;OAEP实际上是PKCS-1编码原语之上用于密钥加密的方案。OAEP更安全,并且对最大消息长度设置了更大的限制,该限制还绑定到哈希算法及其密钥长度 以下答复的另一个缺点是没有强调CALG_RSA_KEYX应专门用于密钥交换,之后可以使用所需的任何对称密钥加密算法传输任何长度的消息。OP意识到了这一点,他只是想“玩”PK,而我确实涵盖了很多内容,尽管是在长篇大论中 在此之前,我将把这个回答留在这里,以供记录在案,同时也是迈克·D可能想提及的,但如果你认为最好把它全部删除,请务必在这里评论我;为了清楚起见,我不介意这样做!Cryptography crypto api-块模式加密确定输入字节计数,cryptography,Cryptography,我正在尝试使用一个公钥加密某个日期,该公钥派生自使用CALG_RSA_KEYX密钥类型生成的交换密钥对。我使用cryptgetkeyparam KP_BLOCKLEN确定块大小为512位。这似乎是我可以输入cryptencrypt的最大字节数,53个字节(424位),我得到的加密长度是64。如何确定可以将多少字节送入cryptencrypt?如果输入超过53个字节,调用将失败。编辑:尽管此响应被OP标记为已接受,请参阅Rasmus Faber响应,因为这是一个更好的响应。24小时后发布,Rasm
-mjv-2009年9月29日 原始回复: 在cryptencrypt()返回错误后,您是否检查了GetLastError()中的错误代码? 我怀疑可能是NTE_BAD_LEN,除非有其他问题 也许您可以发布围绕调用scriptencryt()的代码 当看到CryptEncrypt()调用时,Bingo 您似乎没有使用RSAES w/OAEP方案,因为您没有启用CRYPT_OAEP标志。该OAEP方案是基于RSAE的分组密码。但是,后一种加密算法只能加密略小于其密钥大小(以字节表示)的消息。这是由于PKCS#1中定义的最小填充大小;这种填充有助于保护算法免受一些关键攻击(我认为是基于已知明文的攻击) 因此,您有三种选择:
- 在Flag参数中使用CRYPT_OAEP来加密()
- 将密钥大小扩展到1024(如果您可以控制它,请注意较长的密钥将增加编码/解码的时间…)
- 限制自己清除短于54字节的文本消息
但是,如果有疑问,请咨询真正的密码专家,而不是像我这样的人:-)编辑:尽管此响应被OP标记为接受,请查看Rasmus Faber响应,因为这是一个更好的响应。24小时后发布,Rasmus的回复纠正了事实错误,特别是错误地将OAEP描述为分组密码;OAEP实际上是PKCS-1编码原语之上用于密钥加密的方案。OAEP更安全,并且对最大消息长度设置了更大的限制,该限制还绑定到哈希算法及其密钥长度 以下答复的另一个缺点是没有强调CALG_RSA_KEYX应专门用于密钥交换,之后可以使用所需的任何对称密钥加密算法传输任何长度的消息。OP意识到了这一点,他只是想“玩”PK,而我确实涵盖了很多内容,尽管是在长篇大论中 在此之前,我将把这个回答留在这里,以供记录在案,同时也是迈克·D可能想提及的,但如果你认为最好把它全部删除,请务必在这里评论我;为了清楚起见,我不介意这样做!
-mjv-2009年9月29日 原始回复: 在cryptencrypt()返回错误后,您是否检查了GetLastError()中的错误代码? 我怀疑可能是NTE_BAD_LEN,除非有其他问题 也许您可以发布围绕调用scriptencryt()的代码 当看到CryptEncrypt()调用时,Bingo 您似乎没有使用RSAES w/OAEP方案,因为您没有启用CRYPT_OAEP标志。该OAEP方案是基于RSAE的分组密码。但是,后一种加密算法只能加密略小于其密钥大小(以字节表示)的消息。这是由于PKCS#1中定义的最小填充大小;这种填充有助于保护算法免受一些关键攻击(我认为是基于已知明文的攻击) 因此,您有三种选择:
- 在Flag参数中使用CRYPT_OAEP来加密()
- 将密钥大小扩展到1024(如果您可以控制它,请注意较长的密钥将增加编码/解码的时间…)
- 限制自己清除短于54字节的文本消息