使用jose4j生成JWS时使用私钥生成JWK



我正在尝试使用我的私钥生成JWK,同时使用jose4j库使用前面提到的JWK生成JWE。但是生成的密钥似乎并不正确,而且它没有所有的字段(只生成了n、e和kty,期望的字段是kty、n、e、d、p、q、dp、dq、qi(。有什么建议吗?

我正在使用以下代码:

byte[] decoded = Base64.decodeBase64(privateKeyString);
PrivateKey privateKey =
KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPrivateKeySpec privKeySpec = kf.getKeySpec(privateKey, RSAPrivateKeySpec.class);
RSAPublicKeySpec pubKeySpec =
new RSAPublicKeySpec(privKeySpec.getModulus(), privKeySpec.getPrivateExponent());
RSAPublicKey pubKey = (RSAPublicKey) kf.generatePublic(pubKeySpec);
RsaJsonWebKey jwkp = (RsaJsonWebKey) PublicJsonWebKey.Factory.newPublicJwk(pubKey);
jwkp.setPrivateKey(privateKey);
jwkp.toJson(JsonWebKey.OutputControlLevel.PUBLIC_ONLY);

JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE需要在toJson(...)调用中显式使用,才能包含私钥字段。这是d。如果是RSAPrivateCrtKey,其他的p、q、dp、dq、qi都会出现

最新更新