java - Java 和 .Net 4.6 为同一 key 生成不同的 JSON Web 加密 (JWE) token

标签 java c# .net-4.6 jwe jose

我需要从 Java 和 .Net 4.6 c# 应用程序生成 JWE token (JWE token 将在 Java 和 .Net 应用程序之间传递)。 Java 应用程序正在使用 Nimbus Jose 库,.Net 应用程序正在使用 jose-jwt nuget 中提供了包。

我目前正在制作一个示例。然而,对于相同的 key 、 key ID 和负载,Java 和 .Net 应用程序会生成不同的 JWE token 。

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();

.Net代码

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 token 是不同的。 我在 .Net 代码中缺少什么(我想只更改 .Net 代码)? 我们是否可以将其他 .Net 4.6 兼容库用于 JWE?

最佳答案

这是正常行为。除了 key Material 之外,在计算 token ( see step 9. in section 5.1 of the RFC7516 )期间还会生成初始化 vector (IV)。

该 IV 应是随机字节字符串,并且熵应足以保证唯一性。

关于java - Java 和 .Net 4.6 为同一 key 生成不同的 JSON Web 加密 (JWE) token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272910/

相关文章:

c# - 固定对象时的 GC 行为

java - 从java客户端发布到Django表单与curl -d

c# - 为什么 jQuery 不能与我一起使用 ASP.NET?

c# - C# 中的构造函数

asp.net - Azure 应用服务应用程序设置无法通过 ConfigurationManager 获得

c# - .NET 4.6 的 Task.CompletedTask 有什么意义?

java - 在java中设置随机数的精度?

java - 什么是 NullPointerException,我该如何解决?

java - 如何让radiobutton改变表格数据

c# - 在字节 [] 中查找 MBUS 电报