java如何使用JWE进行加密

JWE全称是Json Web Encripytion ,即json web 加密,其本身是由一系列标准构成的,本文章讲解的是采用软加密的方式:

JWE加密分为RSA公钥和EC公钥两种模式,RSA公钥采用的是传统大质数相乘原理,ECC公钥为椭圆曲线算法原理;相对来说ECC模式要比RSA模式快;当RSA加密需要的秘钥长度越来越长时,相应的运算也越来越耗时,这几乎呈指数级增长;ECC模式要比RSA模式好很多,当所需的秘钥长度越来越长时,ECC的cpu消耗是线性增长的。

本文章讲解的是RSA的方式进行jwe的加密。

使用JWE加密时需要引入的maven依赖包:

<dependency>

<groupId>com.nimbusds</groupId>

<artifactId>nimbus-jose-jwt</artifactId>

<version>8.20</version>

</dependency>

需要使用nimbusds提供的JWE加密组件,废话不多说,直接上代码:

private static String jweEncryption(Key publicKey, String payload)

      throws Exception {


    System.out.println("Payload before encryption :: " + payload);

    /*Encryption*/

    JWEHeader.Builder builder =

        new JWEHeader.Builder(JWEAlgorithm.RSA_OAEP, EncryptionMethod.A128GCM);

    builder.keyID("encryptKid");

    JWEHeader header = builder.build();

    JWEEncrypter encryptedJWE = new RSAEncrypter((RSAPublicKey) publicKey);

    JWEObject jweObject = new JWEObject(header, new Payload(payload));

    jweObject.encrypt(encryptedJWE);

    String serializedJWE = jweObject.serialize();

  // System.out.println("Payload after Encryption:: " + serializedJWE);

  return serializedJWE;

  }

JWE是由系列标准组成的,JWEHeader就是java实现这一标准的一个类,关于JWE标准的文章可以参照下面的的连接:

http://www.mamicode.com/info-detail-2865896.html

JWEHeader里面有各种各样的参数,比较重要的有alg,enc,kid,

alg表示使用的的公钥算法模式,我们使用的是alg=RSA-OAEP;

alg和使用的公钥有关,如果使用的是RSA公钥,alg可以取值:RSA1_5,RSA_OAEP,RSA-OAEP-256;如果使用的是ECC公钥,则取值可能为:A128KW,A192KW,A256KW等

enc表示的是使用的加密分组是多少位,并采用哪种方式,enc=A128GCM,表示使用128位分组的GCM加密方式。

kid用来标识使用的公钥,一般由解密方提供,用来告诉解密方用的哪把秘钥。

最后是JWE加密的输出,JWE加密的输入也是有一系列的标准定义的:一般密文输出都是如下格式:

输出的JWE Compact序列为:BASE64URL(UTF8(JWE Protected Header)) || ’.’ || BASE64URL(JWE Encrypted Key) || ’.’ ||BASE64URL(JWE Initialization Vector) || ’.’ || BASE64URL(JWE Ciphertext) || ’.’ || BASE64URL(JWE Authentication Tag)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。