超过 256 长度的数字签名验证

Posted

技术标签:

【中文标题】超过 256 长度的数字签名验证【英文标题】:Digital Signature Verification for more than 256 length 【发布时间】:2019-05-25 12:32:50 【问题描述】:

我正在使用 RSA 算法来验证数字签名,其中长度为 256。 但是我必须验证具有可变签名长度的数据包,例如(344,328)。如果我将使用 RSA,则会出现以下错误。

线程“main”java.security.SignatureException 中的异常:签名长度不正确:得到 328 但预期为 256..

那么我使用哪个算法来验证可变长度的签名?

【问题讨论】:

签名是如何创建的?不要把要签名的数据放在RSA签名里,那是不安全的!仅对哈希进行签名(为此使用通用的 RSA 签名标准)。请注意,对于 RSA2048 位密钥,最大数据大小为 256 字节,这是一个数学事实,任何人都无法更改! 实际上我正在从事银行项目,其中我没有关于它们是如何创建的信息,但我收到了包装(来自长度为 344,328 的银行),必须从我身边验证......是否可以验证超过 256 长度的签名 那您不使用Java提供的方法来验证RSA签名吗?无论如何,如果您想验证签名生成,您必须知道使用哪种标准。 【参考方案1】:

是的,签名长度将固定为 256,但在签名长度为 344 的情况下,他们使用 Base64 对生成的签名进行了加密。首先我要解密签名字节然后验证。

【讨论】:

以上是关于超过 256 长度的数字签名验证的主要内容,如果未能解决你的问题,请参考以下文章

数字签名错误 - 签名长度不正确:得到344但期望256

BouncyCastle ECDSA 签名验证使用 prime256v1 和 SHA256withECDSA 算法失败

RSA.SignHash SHA512 和 SHA256 给出相同的签名长度

无法验证 RS256 签名的 JWT

在 Knock (rails) 中验证用 RS256 签名的 JWT 令牌

ES256 JWT 在 PHP 中为 Apple AppStoreConenct API 身份验证签名