FORUM D’ENTRAIDE INFORMATIQUE (FEI)
Site d’assistance et de sécurité informatique

Entraide pour le programmation en général (tous langages).
Règles du forum : Entraide concernant la programmation informatique en général, tous langages : recherche ou correction d'un code ou d'une fonction, aide à la réalisation d'un projet...
Pour la programmation web (HTML, CSS, PHP, MySQL...), il est conseillé de s'orienter dans le forum Webmastering.
Merci de lire et de respecter la charte générale du forum.
  • Avatar du membre
#202875
Hello world !
Et vous, qui allez, j'en suis sûr, répondre avec brio...

Voilà, j'ai un soucis lorsque j'exécute mon programme - un triolet de programme en fait - son résultat diffère en fonction de son mode de lancement, à savoir

soit depuis l'IDE sur lequel il est écrit avec comme arguments du Run configuration de Encrypt.java :
"Eo6Uam3jA0-utTtI94bj2lPduuS4Jy9XPtkQG30JQzE=" "Aïe, aïe, ça écrit pô bien !"
output : GhpMryHkHJ6uZ87SZg816R4TbHwaliyYxSwzjJyyelA=

puis pour Decypher.java :
"Eo6Uam3jA0-utTtI94bj2lPduuS4Jy9XPtkQG30JQzE=" "GhpMryHkHJ6uZ87SZg816R4TbHwaliyYxSwzjJyyelA="
output : Aïe, aïe, ça écrit pô bien !


soit depuis l'invite de commande (Windows et variable environnement ad hoc) avec successivement :
Code : Tout sélectionner
java -jar "C:\Users\moi\Encrypt.jar" "Eo6Uam3jA0-utTtI94bj2lPduuS4Jy9XPtkQG30JQzE=" "Aïe, aïe, ça écrit pô bien !"
output : GhpMryHkHJ6uZ87SZg816R4TbHwaliyYxSwzjJyyelA=
Code : Tout sélectionner
java -jar "C:\Users\moi\Decypher.jar" "Eo6Uam3jA0-utTtI94bj2lPduuS4Jy9XPtkQG30JQzE=" "GhpMryHkHJ6uZ87SZg816R4TbHwaliyYxSwzjJyyelA="
output : Aïe, aïe, ça écrit pô bien !


soit depuis des fichiers batch (encodés en ANSI ou en UTF-8, même résultat) qui contiennent suucessivement :
Code : Tout sélectionner
@echo off
java -jar "C:\Users\moi\Encrypt.jar" "Eo6Uam3jA0-utTtI94bj2lPduuS4Jy9XPtkQG30JQzE=" "Aïe, aïe, ça écrit pô bien !"
pause
output : 5JaO3P+T0ZAEv4+Xbc/bbGvykgT1R0zO7vquGvHF150=
Code : Tout sélectionner
@echo off
java -jar "C:\Users\moi\Decypher.jar" "Eo6Uam3jA0-utTtI94bj2lPduuS4Jy9XPtkQG30JQzE=" "5JaO3P+T0ZAEv4+Xbc/bbGvykgT1R0zO7vquGvHF150="
pause
output : A´e, a´e, þa Úcrit p¶ bien !
Mais si je mets en second argument du Decypher.jar le message chiffré que j'aurais obtenu par une des deux autres méthode, l'encodage est ok, l'output est conforme.

D'où cela vient-il ? Comment y remédier ?

Voici le triolet de programme en question :
Code : Tout sélectionner
class KeysGenerator {
	public static void main(String _arguments[]) {
		try {
			KeyGenerator key_generator = KeyGenerator.getInstance("AES");
			key_generator.init(256, SecureRandom.getInstanceStrong());
			SecretKey _key = key_generator.generateKey();
			System.out.println("Cle secrete (Base64) : ".concat(Base64.getUrlEncoder().encodeToString(_key.getEncoded())));
		} catch(NoSuchAlgorithmException _e) {
			System.err.println("Error when creating the key : ".concat(_e.getMessage()));
		}
	}
}
Code : Tout sélectionner
class Encrypt {
	public static void main(String _arguments[]) {
		String _key = _arguments[0];
		SecretKeySpec _specification = new SecretKeySpec(Base64.getUrlDecoder().decode(_key), "AES");
		try {
			Cipher _encrypt = Cipher.getInstance("AES");
			_encrypt.init(Cipher.ENCRYPT_MODE, _specification);
			byte bytes[] = _encrypt.doFinal(_arguments[1].getBytes());
			System.out.println("Message chiffre (Base64)  : ".concat(Base64.getEncoder().encodeToString(bytes)));
		} catch(NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException _e) {
			System.err.println("Erreur lors du chiffrement : ".concat(_e.getMessage()));
		} 
	}
}
Code : Tout sélectionner
class AESDecypher {
	public static void main(String _arguments[]) {
		String _password = _arguments[0];
		SecretKeySpec _specification = new SecretKeySpec(Base64.getUrlDecoder().decode(_password), "AES");
		try {
			Cipher _decypher = Cipher.getInstance("AES");
			_decypher.init(Cipher.DECRYPT_MODE, _specification);
			byte _bytes[] = _decypher.doFinal(Base64.getDecoder().decode(_arguments[1]));
			System.out.println("Message déchiffre : " + new String(_bytes));
		} catch(NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException _e) {
			System.err.println("Erreur lors du déchiffrement : ".concat(_e.getMessage()));
		} 
	}
}
Merci de bien vouloir m'éclairer, : l'encodage,
entre l'unicode de la JVM, le cp1252 de ses flux par défaut, et l'ANSI de Windows (est-ce vraimentà 100 % le cp1252 ?),
n'est vraiment pas ma tasse de thé, d'autant que je ne saisi pas où il se perd, ni même si c'est bien strictement un problèeme d'encodage de l'affichae console.
Présentation

Hello, Bienvenue sur FEI :) @+ Gabriel.

Bonjour :bonjour: Merci de m'accueillir sur votr[…]

Bonjour à tous, D'abord, désol&eacut[…]

Salutations, chers amis, Les joueurs peuvent profi[…]