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);
자바
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#에서 simil에 비해 많은 Base64 Java 메소드 변환을 테스트 했음에도 불구하고 완전히 바르게되었습니다. 이번에는 바이트를 보면 어리석은데, 실제로는 동일합니다. – lidermin