java如何使用JWE进行加密

JWE的全称是JSON Web Encryption(JWE),即基于JSON Web标准的加密技术。它本身是由一系列标准构成的体系,并且本文将介绍采用软加密技术进行处理的方法。
JWE加密主要采用两种公钥体系:RSA公钥体系基于传统的大质数相乘原理实现密钥生成与交换过程;椭圆曲线公钥体系(ECC)则直接应用椭圆曲线算法完成相关的加密与解密操作。在速度性能方面相比而言椭圆曲线公钥体系具有明显优势;从密钥管理的角度 RSA 系统由于其依赖于大质数分解难题使得其安全性得到了广泛认可但同时也带来了秘钥长度管理上的不便随着 RSA 加密所需的密钥长度不断增加其运算时间也随之显著增加呈现出明显的指数级增长趋势相对而言椭圆曲线公钥体系在安全性与效率之间展现出更好的平衡特性特别是在处理较长密钥的情况下其计算开销呈线性增长趋势显著优于 RSA 系统
本文章讲解的是RSA的方式进行jwe的加密。
使用JWE加密时需要引入的maven依赖包:
需要使用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由一系列标准构成,在Java语言中实现这一标准的类被称为JWEHeader类;有关于JWE标准的文章可以通过指定链接 JW : ttyyy511 获取电子版资源
JWEHeader里面有各种各样的参数,比较重要的有alg,enc,kid,
alg表示使用的的公钥算法模式,我们使用的是alg=RSA-OAEP;
算法alg与所用的公钥相关。若采用的是RSA公钥,则可取以下几种形式: RSA1_5、RSOAEPRSA_OAEP、RSOAEPRSA-OAEP-256;若采用的是椭圆曲线(ECC)公钥,则可取以下几种形式: A192KW、A128KW、A256KW等。
enc代表使用的加密分组的大小以及所采用的方式。例如,在这种情况下, enc=A128GCM, 表示使用128位分组并采用GCM加密方法。
kid用于标识使用的公钥通常由解密方提供,并告知解密方使用的是哪把密钥。
最终为JWE加密所生成的是解密后的密文结果;其输入数据同样遵循一系列标准规范;通常情况下,解密后的密文呈现如下标准格式:
表示为JWE Compact序列的形式中包含以下几个组成部分:首先包含BASE64URL(UTF8(JWE Protected Header))字段;接着是BASE64URL(JWE Encrypted Key)字段;随后是BASE64URL(JWE Initialization Vector)字段;之后是BASE64URL(JWE Ciphertext)字段;最后包含BASE64URL(JWE Authentication Tag)字段。各部分之间使用'||'符号分隔开以确保数据完整性
