【发布时间】:2019-08-24 22:23:45
【问题描述】:
注意: 自签名证书已安装在我的机器上。
我有一个 JWT 令牌,我正在尝试使用 RSA 算法对其进行签名,我找到了一个库“JOSE”,可以通过以下方法实现相同的目的。
Jose.JWT.Encode(payload, certificate.GetRSAPrivateKey(), JwsAlgorithm.RS256);
在深入研究它的“编码”方法后,我发现它使用了Hashing SHA-256算法。
我正在寻找一种方法,其中排除哈希并使用 RSA 直接签名。
任何帮助将不胜感激!
【问题讨论】:
-
我正在寻找一种排除散列并使用 RSA 直接签名的方法 为什么? RSA 消息签名只有在首先对消息进行哈希处理,然后对哈希进行签名时才有意义。
-
@JamesKPolk 实际上,在消息/令牌太长的情况下,散列是有意义的。在我的情况下,令牌不是那么长,所以我只是想避免这种额外的开销。请提出任何更好的解决方案,以便我可以直接签名。
-
库旨在实现标准,标准签名算法首先对消息进行哈希处理。散列的成本通常低于签名的成本,因此消除散列步骤并不能为您节省太多。
-
同意你的观点,但如果我问你直接的解决方案,你能提供吗?
-
RSA 健壮的实现需要固定大小的输入,并且输出经常被填充等等。您要求调整 RSA,所以...您可以推出自己的 RSA 签名实现,但这很可能是错误的(即使谷歌工程师也不这样做)。此外,我正在重申@james 的答案:与 RSA 签名相比,散列确实不会降低性能。
标签: c# cryptography jwt rsa encode