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

Java 8, chiffrement AES, invite de commande, batch et IDE(Eclipse)

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.

Répondre

Afin d’empêcher la création automatisée de comptes, nous vous demandons de réussir le défi ci-contre.
Smileys
:D :) :-) ;) :| :( :cry: :cheers: :hourra: :mv: :lol: :mdr: :bonjour: :hello: :jap: :siffle: :bisou: :P :o :x :roll: :good: :bad: :super: :reflexion: :suspect: :? :oops: :peur: :zen: :boude: :bug:

Revue du sujet : Java 8, chiffrement AES, invite de commande, batch et IDE(Eclipse) Étendre la vue

Java 8, chiffrement AES, invite de commande, batch et IDE(Eclipse)

par Oliv » jeu. 23 avr. 2020 19:29
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.

Bonjour à tous, Je suis à la recher[…]

Best SEO Company Perth

With millions of websites on the internet, it can […]

Présentation Judi

Salut, Bienvenue sur FEI :) À très[…]