当前位置: 首页 > 知识库问答 >
问题:

如何生成RSA密钥使用sha512为JWT?

辛才俊
2023-03-14

我知道RSA密钥可以使用不同的sha算法生成。使用openssl,我似乎无法指定密钥生成器应该使用什么算法。我怀疑它使用的是sha256

如何在bashshell或Ruby中使用不同的sha算法(例如sha512)生成RSA密钥?openssl库是否支持使用不同的算法生成RSA密钥?如果没有,有人知道我可以使用另一个图书馆吗?(在ruby中,OpenSSL::PKey::RSA似乎不允许选择算法,但文档对我来说很难遵循soo…?)

很抱歉,如果这个问题已经得到了回答,但我还没有找到答案。

也许我还应该注意(如果我错了):我的理解是,为生成的RSA密钥选择大小(即RSA 2048)与选择哈希算法(即sha512)是分开的。

更新-一些背景

我想用RSA密钥对Java Web令牌进行签名。我使用的JWT库给我的印象是,可以使用不同的散列算法(RS256、RS384、RS512)生成RSA密钥。使用openssl生成密钥似乎不允许我选择使用什么散列算法。

谢谢

共有1个答案

陶高扬
2023-03-14

RSA密钥和“RSA算法”没有任何哈希算法的概念。

RSA密钥只有两个素数和一个其他数(来自(pqe)三元组,所有其他值都可以派生)。其他合理的值存在)和pq是随机生成的(虽然几乎任何CSPRNG都会有一个后备哈希算法CSPRNG本身通常被认为是一个黑盒,只是发出随机性)。

散列算法在RSA签名中发挥作用。

对于RSA签名,原始数据在算法下进行哈希处理,然后使用哈希值、算法标识符和私钥来生成签名(对于PKCS v1.5签名...对于PSS,还有第二个(有效固定的)标识符和一些更随机的字节)...

RS256是使用SHA(-2)-256的RSASSA-PKCS1-v1_5的JWA(JSON Web算法)标识符。

JWA第3.3节说

本节定义了使用SHA-2[SHS]散列html" target="_blank">函数使用RFC 3447[RFC3447](通常称为PKCS#1)第8.2节中定义的RSASSA-PKCS1-v1_5数字签名算法。

大小为2048位或更大的密钥必须与这些算法一起使用。

RSASSA-PKCS1-v1_5SHA-256数字签名如下生成:使用RSASSA-PKCS1-v1_5-SIGN和具有所需私钥的SHA-256哈希函数生成JWS签名输入的数字签名。这是JWS Signature值。

(强调我的)

因此,对RSA密钥没有任何要求,只是该规范是在2015年编写的,因此他们强制规定了2015年兼容的最小密钥大小。

 类似资料:
  • 主要的问题是,我对C相当陌生,OpenSSL留档对我来说不够清晰,我尝试过使用读和写rsa键到C中的pem文件,但我不太明白。例如,函数如何创建私有和公共?而从何而来?pcszPassphrase的意义是什么? 我会解释,好像这是某种伪代码,这就是我想做的,粗体部分是我不知道如何做的: 生成私钥和公钥作为十六进制缓冲区(客户端) 基本上,我知道如何处理AES加密/解密和通信协议,反正他们已经实现了

  • 我试图通过遵循本教程在heroku上部署php应用程序https://devcenter.heroku.com/articles/getting-started-with-php#introduction 当前正在执行此步骤https://devcenter.heroku.com/articles/getting-started-with-php#deploy-应用程序 当我运行命令“git pu

  • 问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(

  • 问题内容: 令人惊讶的是,网络上关于使用Bouncy Castle的轻量级API的信息很少。看了一会儿之后,我得以整理出一个基本的例子: 我有RSA的一个基本的了解,并且会在幕后数学,让我明白了什么和是。我想是指一个互质数,只要使用适当的填充,它就可以很小(如3)。但是,我不知道指的是什么(提到某个地方它可能指的是百分比,但我想确定)。的使用是不言自明的。RSAKeyGenerationParam

  • 问题内容: 我需要用openssl生成的和密钥替换从Unix到Java代码的加密和解密步骤 我生成密钥 我在Unix中使用键(我需要在Java中执行) 这是我的尝试 但它不起作用,PKCS8EncodedKeySpec / X509EncodedKeySpec不正确…但是我不知道该放什么 问题答案: 我认为您在读取PEM文件时遇到问题。JPA不直接支持PEM格式。您有两种选择,要么将它们转换为DE

  • 我知道可以使用此链接为OpenSSL中的自签名证书生成一个公钥和一个私钥。但是对于给定的公钥,我有没有可能算出对应的私钥呢?我一直在使用1024位的RSA公钥。