Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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 256位密码的加密转换为C#_Java_C#_Encryption_Hmac_Pbkdf2 - Fatal编程技术网

将基于Java 256位密码的加密转换为C#

将基于Java 256位密码的加密转换为C#,java,c#,encryption,hmac,pbkdf2,Java,C#,Encryption,Hmac,Pbkdf2,我需要在C#中实现一个API,它将以与java编写的API相同的方式加密机密 Java代码如下所示 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); KeySpec spec = new PBEKeySpec(password, salt, iteration, size); SecretKey tmp = factory.generateSecret(spec); SecretKey

我需要在C#中实现一个API,它将以与java编写的API相同的方式加密机密

Java代码如下所示

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(password, salt, iteration, size);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "HmacSHA256");
var secret = KeyDerivation.Pbkdf2(
    password, salt, KeyDerivationPrf.HMACSHA256, iteration, size);
我对C#代码的尝试如下

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(password, salt, iteration, size);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "HmacSHA256");
var secret = KeyDerivation.Pbkdf2(
    password, salt, KeyDerivationPrf.HMACSHA256, iteration, size);
当我比较生成的机密时,转换为base 64,它们是不同的。它们的长度也相差几百个字符


生成与Java API相同的密钥的C#代码缺少什么?

Java示例使用base64编码的SecretKey对象
tmp
创建另一个密钥,您是否尝试使用C#code中的base64编码的
secret
变量作为密码来生成另一个密钥?对于java中的
PBEKeySpec
,大小以位为单位,而对于C#code,大小以字节为单位。如果您想要AES-256,那么Java的大小应该是256,而C#.1的大小应该是32。更容易看出十六进制与Base64之间的差异。2.如果输出长度不同,则可能会将尺寸规格或衍生信息发送到输出。或者一个实现正在添加。3.将十六进制输出添加到问题中。4.API作者喜欢通过不指定诸如位、字节和默认值之类的小东西来使事情变得神秘。他们喜欢显示自己比单纯用户的优越性。改变大小奏效了!非常感谢。我错过了位/字节部分。java示例使用base64编码的SecretKey对象
tmp
创建另一个密钥,您是否尝试使用C#code中base64编码的
secret
变量作为密码来生成另一个密钥?对于java中的
PBEKeySpec
,大小以位为单位,而对于C代码,它是以字节为单位的。如果您想要AES-256,那么Java的大小应该是256,而C#.1的大小应该是32。更容易看出十六进制与Base64之间的差异。2.如果输出长度不同,则可能会将尺寸规格或衍生信息发送到输出。或者一个实现正在添加。3.将十六进制输出添加到问题中。4.API作者喜欢通过不指定诸如位、字节和默认值之类的小东西来使事情变得神秘。他们喜欢显示自己比单纯用户的优越性。改变大小奏效了!非常感谢。我错过了位/字节部分。