如何生成用于 com.auth0 java-jwt 的 RSA 密钥?

Posted

技术标签:

【中文标题】如何生成用于 com.auth0 java-jwt 的 RSA 密钥?【英文标题】:How can I generate a RSA key for use with com.auth0 java-jwt? 【发布时间】:2018-03-27 15:01:59 【问题描述】:

https://github.com/auth0/java-jwt

说明为 JWT 设置算法应该很简单

//RSA
RSAPublicKey publicKey = //Get the key instance
RSAPrivateKey privateKey = //Get the key instance
Algorithm algorithmRS = Algorithm.RSA256(publicKey, privateKey);

问题是我不知道如何在不接触文件系统的情况下创建 RSAPublicKey 和 RSAPrivateKey 实例。

    它应该是安全的。 它不应该在文件系统上创建密钥,因为我打算通过另一种方法存储它。

通常,在我做对之前,我会猜到这种事情,但考虑到它是密码学,我想做正确的事情。

keygen = KeyPairGenerator.getInstance("RSA");
        RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(2048, RSAKeyGenParameterSpec.F4); //What does F4 mean vs F0?
            keygen.initialize(spec);
            KeyPair keypair = keygen.generateKeyPair();
            PublicKey pub = keypair.getPublic(); //Wrong type, need RSAPublicKey
            PrivateKey priv = keypair.getPrivate(); //Wrong type, need RSAPrivateKey

【问题讨论】:

【参考方案1】:

您可以直接将公钥和私钥转换为RSAPublicKeyRSAPrivateKey,因为您使用的是 RSA KeyPairGenerator

RSAPublicKey rsaPublicKey = (RSAPublicKey) keypair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keypair.getPrivate();

您可以使用key.getEncoded(); 获取关键内容(无需强制转换)并将其存储为您喜欢的任何字节数组

【讨论】:

你知道 F0 和 F4 指数的用途吗? 我认为 F0 (3) 是RSAKeyPairGenerator 使用的公共指数的最小值,而 F4(65537) 是 RFC 的推荐值。见crypto.stackexchange.com/questions/3110/…

以上是关于如何生成用于 com.auth0 java-jwt 的 RSA 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

ClassNotFoundException:com.auth0.jwt.algorithms.Algorithm

JWT 发出相同的令牌

无法在 Java 项目中导入 com.auth0.jwt

JWT

如何使用 Keycloak 解码 JWT

如何在 Java 中使用 RSAPublicKey 和 RSAPrivateKey 类?