J'essaye de convertir le code suivant de C# en Java, mais j'obtiens différentes valeurs de résultat de clés. Voici mes codes:C# Code de cryptage porté vers 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();
Le problème est que je reçois des clés différentes, même avec les mêmes paramètres fournis sur les deux codes: (seulement le premier 4 octets correspond)
REMARQUE:ces valeurs ont été converties en base64:
C#: GWR/loJAuuiPvP0cuGGCVXErz16HjOZ7yQkCCHfBux4 = Java: GWR/4oCT
Si je continue à jouer avec le nombre prévu à generateDerivedParameters (32), il ne me donne que plus d'octets mais ne correspond toujours pas au résultat de .Net.
Je ne peux pas changer le code .Net, donc s'il vous plaît, toute suggestion doit être faite du côté Java.
Merci d'avance.
Merci pour la clarification, mais ne correspond pas à la clé C#, ceci est le résultat: GWR/4oCT4oCaQMK6w6jvv73CvMO9HMK4YeKAmlVxK8OPXuKAocWSw6Z7w4kJAgh3w4HCux4 = – lidermin
On dirait une norme différente (sic!) De base64 est utilisé alphabet différent. Pourriez-vous comparer les octets, les valeurs binaires pour vérifier si c'est pareil? – kan
OMG vous avez tout à fait raison, même si j'ai beaucoup testé la conversion de la méthode Base64 Java contre son semblable en C#, cette fois j'ai été stupide par cela, en regardant les octets, ils sont en fait les mêmes. – lidermin