JSON 由 Java 和 .Net 4.6 为同一密钥生成的不同 JSON Web 加密 (JWE) 令牌
Different JSON Web Encryption(JWE) tokens generated for same key by Java and .Net 4.6
我需要从 Java 和 .Net 4.6 c# 应用程序生成 JWE 令牌(JWE 令牌将在 Java 和 .Net 应用程序之间传递)。 Java 应用程序正在使用 Nimbus Jose 库,.Net 应用程序正在使用 nuget 中可用的 jose-jwt 包。
我目前正在制作样本。但是,对于相同的密钥、密钥 ID 和有效负载,Java 和 .Net 应用程序生成不同的 JWE 令牌。
Java加密代码示例(由另一个第三方完成,无法更改其实现):
String payload = "{\"testP\":\"test\"}";
byte[] key=<secret key bytes here>;
Payload payload = new Payload(payload);
JWEHeader jweHeader = new JWEHeader.Builder(JWEAlgorithm.A256KW, EncryptionMethod.A256GCM).keyID("test_kid").build();
JWEObject jweObject = new JWEObject(jweHeader, payload);
jweObject.encrypt(new AESEncrypter(key));
String encryptedPayload = jweObject.serialize();
.网络代码
using Jose;
----------------------------------------
----------------------------------------
string payload= "{\"testP\":\"test\"}";
var headers= new Dictionary<string, object> { {"kid","test_kid"},};
byte[] secretKey =<secret key bytes here>;
var jweToken=JWT.Encode(payload, secretKey, JweAlgorithm.A256KW, JweEncryption.A256GCM, extraHeaders: headers);
这两个 JWE 令牌是不同的。
我在 .Net 代码中缺少什么(我想只更改 .Net 代码)?
是否有任何其他可用于 JWE 的 .Net 4.6 兼容库?
这是正常行为。除了密钥材料外,在计算令牌 (see step 9. in section 5.1 of the RFC7516) 期间还会生成初始化向量 (IV)。
这个 IV 应该是一个随机字节串,并且熵应该足以保证唯一性。
我需要从 Java 和 .Net 4.6 c# 应用程序生成 JWE 令牌(JWE 令牌将在 Java 和 .Net 应用程序之间传递)。 Java 应用程序正在使用 Nimbus Jose 库,.Net 应用程序正在使用 nuget 中可用的 jose-jwt 包。
我目前正在制作样本。但是,对于相同的密钥、密钥 ID 和有效负载,Java 和 .Net 应用程序生成不同的 JWE 令牌。
Java加密代码示例(由另一个第三方完成,无法更改其实现):
String payload = "{\"testP\":\"test\"}";
byte[] key=<secret key bytes here>;
Payload payload = new Payload(payload);
JWEHeader jweHeader = new JWEHeader.Builder(JWEAlgorithm.A256KW, EncryptionMethod.A256GCM).keyID("test_kid").build();
JWEObject jweObject = new JWEObject(jweHeader, payload);
jweObject.encrypt(new AESEncrypter(key));
String encryptedPayload = jweObject.serialize();
.网络代码
using Jose;
----------------------------------------
----------------------------------------
string payload= "{\"testP\":\"test\"}";
var headers= new Dictionary<string, object> { {"kid","test_kid"},};
byte[] secretKey =<secret key bytes here>;
var jweToken=JWT.Encode(payload, secretKey, JweAlgorithm.A256KW, JweEncryption.A256GCM, extraHeaders: headers);
这两个 JWE 令牌是不同的。 我在 .Net 代码中缺少什么(我想只更改 .Net 代码)? 是否有任何其他可用于 JWE 的 .Net 4.6 兼容库?
这是正常行为。除了密钥材料外,在计算令牌 (see step 9. in section 5.1 of the RFC7516) 期间还会生成初始化向量 (IV)。
这个 IV 应该是一个随机字节串,并且熵应该足以保证唯一性。