0
我試圖從C#轉換爲Java的以下代碼,但我得到不同的結果值的鍵。這裏是我的代碼: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/loJAuuiPvP0cuGGCVXErz16HjOZ7yQkCCHfBux4 = 爪哇: GWR/4oCT
如果我保持與提供給generateDerivedParameters(32)的數量播放時,它只給了我更多的字節,但仍然不符合.Net的結果。
我不能更改.Net代碼,所以請任何建議必須在Java端完成。
在此先感謝。
感謝澄清,但仍然不匹配的C#鍵,這就是結果:GWR/4oCT4oCaQMK6w6jvv73CvMO9HMK4YeKAmlVxK8OPXuKAocWSw6Z7w4kJAgh3w4HCux4 = – lidermin
貌似不同的標準(原文如此)的Base64是使用不同的字母。你可以比較字節,二進制值來驗證它是否相同? – kan
OMG你是完全正確的,儘管我已經在C#中測試了很多Base64 Java方法轉換,這次我一直愚蠢,看着字節,它們實際上是相同的。 – lidermin