我正在尝试将下面的代码从C#转换为Java,但得到了不同的键结果值。这是我的密码:
C#:
plainText = "Hello World";
passPhrase = "IhDyHz6bgQyS0Ff1/1s=";
saltValue = "0A0Qvv09OXd3GsYHVrA=";
hashAlgorithm = "SHA1";
passwordIterations = 3;
initVector = "GjrlRZ6INgNckBqv";
keySize = 256;
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
PasswordDeriveBytes password = new PasswordDeriveBytes(
passPhrase,
saltValueBytes,
hashAlgorithm,
passwordIterations);
byte[] keyBytes = password.GetBytes(keySize / 8);Java
byte[] password = PassPhrase.getBytes("ASCII");
byte[] salt = PKCS5S1ParametersGenerator.PKCS5PasswordToBytes(SaltValue.toCharArray());
PKCS5S1ParametersGenerator generator = new PasswordDeriveBytes(new SHA1Digest());
generator.init(password, salt, PasswordIterations);
byte[] key = ((KeyParameter)generator.generateDerivedParameters(32)).getKey(); 问题是,即使在这两个代码中提供了相同的参数,我也会得到不同的键:(只有前4个字节匹配)
注意:已将此值转换为Base64:
C#: GWR/loJAuuiPvP0cuGCVXErz16HjOZ7yQkCCHfBux 4= Java: GWR/4 4oCT
如果我继续使用提供给generateDerivedParameters(32)的数字,它只会给出更多的字节,但仍然与.Net的结果不匹配。
我不能更改.Net代码,所以请在Java方面做任何建议。
提前谢谢。
发布于 2011-10-12 16:46:09
generateDerivedParameters方法说:"keySize是我们想要的密钥大小(以位为单位)“。所以你必须使用generateDerivedParameters(32 * 8)
https://stackoverflow.com/questions/7743396
复制相似问题