首页 > 解决方案 > 无法解析 nimbus-jose-jwt 库中的符号“加密”

问题描述

我正在尝试使用“nimbus-jose-jwt”库在 Android 中生成加密的 JWT。但是当我调用encrypt()库的方法 ' ' 时,我得到错误 ' Cannot resolve symbol 'encrypt',即使库的源代码具有我指定的对象的方法 'encrypt()'。

这是我的代码:

 public class EncryptedJWTGenerator {
   
 public EncryptedJWTGenerator() throws NoSuchAlgorithmException, JOSEException {
    }

    JWEAlgorithm alg = JWEAlgorithm.RSA_OAEP_256;
    EncryptionMethod enc = EncryptionMethod.A128CBC_HS256;

    KeyPairGenerator rsaGen = KeyPairGenerator.getInstance("RSA");
    //rsaGen.initialize(2048);
    KeyPair rsaKeyPair = rsaGen.generateKeyPair();
    RSAPublicKey rsaPublicKey = (RSAPublicKey)rsaKeyPair.getPublic();


    // Generate the preset Content Encryption (CEK) key
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

    SecretKey cek = keyGenerator.generateKey();

    // Encrypt the JWE with the RSA public key + specified AES CEK
    JWEObject jweObject = new JWEObject(new JWEHeader(alg, enc), new Payload("Hello, world!"));

    jweObject.encrypt(new RSAEncrypter(rsaPublicKey, cek)); //**ERROR IN THIS LINE**

    String jweString = jweObject.serialize();
    
}

我一直试图解决这个问题几个小时,但还没有成功。请提出解决方案。

标签: androidencryptionjwtjwenimbus-jose-jwt

解决方案


代码中有两个错误:

  • 首先,一个错字:必须删除第 3 行中的右括号。

  • 其次,KeyGenerator在生成CEK时必须进行如下初始化:

    keyGenerator.init(EncryptionMethod.A128CBC_HS256.cekBitLength());
    

通过这些更改,代码可以在我的机器上运行(API28/P)。


推荐阅读