我正在尝试使用我的私钥生成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都会出现