Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和.Net 4.6为同一密钥生成的不同JSON Web加密(JWE)令牌_Java_C#_.net 4.6_Jwe_Jose - Fatal编程技术网

Java和.Net 4.6为同一密钥生成的不同JSON Web加密(JWE)令牌

Java和.Net 4.6为同一密钥生成的不同JSON Web加密(JWE)令牌,java,c#,.net-4.6,jwe,jose,Java,C#,.net 4.6,Jwe,Jose,我需要从Java和.Net 4.6 c#应用程序生成JWE令牌(JWE令牌将在Java和.Net应用程序之间传递)。Java应用程序正在使用Nimbus Jose库,.Net应用程序正在使用nuget中提供的包 我目前正在制作一个样品。但是,对于相同的密钥、密钥Id和有效负载,Java和.Net应用程序生成不同的JWE令牌 Java加密代码示例(由另一第三方完成,无法更改其实现): String-payload=“{\“testP\”:\“test\”}”; 字节[]键=; 有效载荷=新有效载荷

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

我目前正在制作一个样品。但是,对于相同的密钥、密钥Id和有效负载,Java和.Net应用程序生成不同的JWE令牌

Java加密代码示例(由另一第三方完成,无法更改其实现):

String-payload=“{\“testP\”:\“test\”}”;
字节[]键=;
有效载荷=新有效载荷(有效载荷);
JWEHeader JWEHeader=新的JWEHeader.Builder(JWEAlgorithm.A256KW,EncryptionMethod.A256GCM).keyID(“test_kid”).build();
JWEObject JWEObject=新的JWEObject(jweHeader,有效载荷);
jweObject.encrypt(新的AESEncrypter(密钥));
字符串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);
使用Jose;
----------------------------------------
----------------------------------------
字符串有效负载=“{\“testP\”:\“test\”}”;
var headers=newdictionary{{“kid”,“test_kid},};
字节[]secretKey=;
var jweToken=JWT.Encode(有效负载,secretKey,JweAlgorithm.A256KW,JweEncryption.A256GCM,外部头:头);
这两个JWE令牌是不同的。 在.Net代码中我遗漏了什么(我假设只更改.Net代码)?
有没有其他与.Net 4.6兼容的库可以用于JWE?

这是正常的行为。除了关键材料外,在计算令牌()期间还生成初始化向量(IV)

该IV应为随机字节字符串,且熵应足以确保唯一性

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