PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Help : Cryptage - Décryptage
Help : Cryptage - Décryptage
Débuté par M.Damien, 20 sep. 2018 08:19 - 10 réponses
Posté le 20 septembre 2018 - 08:19
Bonjour,

Je dois mettre en place un cryptage avec une société externe n'utilisant pas la suite windev.

Pour exécuté des tests je suis passer via la plateforme : https://crypter.online/crypter/rijndael-128

Algorithme de hachage pour la clé: haval128,3
Clé : TEST123
Clé après Hachage : 93ede6b9a77d6b8d6ec9d82bfdfccd65

Algorithme de cryptage est rijndael-128
Message : je suis un message à crypter
Message après Crypter avec réponse en hexadécimal: 07e879898c3f231f766ae58e79f884e7761147dcf1a2b454a9b74cd04e1666cfa3030769b2e4a7e61218e12268f9881a

J'arrive à effectuer un décryptage via d'autre plateforme en ligne mais pas via windev.


Voici la procédure de décryptage en windev :

Key est un Buffer = HexaVersBuffer("93ede6b9a77d6b8d6ec9d82bfdfccd65")

MessageCryp est un Buffer = HexaVersBuffer("07e879898c3f231f766ae58e79f884e7761147dcf1a2b454a9b74cd04e1666cfa3030769b2e4a7e61218e12268f9881a)

sRésultats est un Buffer = DécrypteStandard(MessageCryp, Key, crypteAES128,crypteCBC,cryptePaddingZéro)

Info(sRésultats) //Z.RD^ H`31I¾¥^†5ÏY>OÍvØßõy:

Merci d'avance.
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 20 septembre 2018 - 11:29
Bonjour,

Une chose est certaine, sur le web les chaines sont en UTF8 et Windows ans ANSI. J'ai peur que le problème vient tout d'abord de là.

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 20 septembre 2018 - 14:01
J'ai ajouté la conversion UTF8VersAnsi cela modifie bien le contenu de la réponse mais elle n'est toujours pas correcte.

//Z.RD^ H`31I¾¥^†5ÏY>OÍvØßõy
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 20 septembre 2018 - 15:10
L'algorithme de hachage pour la clé doit-il obligatoirement être haval128,3 ?

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 20 septembre 2018 - 20:10
Non pas forcément mais j'ai déjà utilisé plusieurs hachage et Cryptage différent sans aucune différence.

J'avoue être très perplexe cela semble si simple...
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 21 septembre 2018 - 10:29
Bonjour,

vous êtes certain de vos hash ?
Car depuis ce site :
https://www.tools4noobs.com/online_tools/hash/

Le HASH en haval128,3 de TEST123 donne :
3ca726e62c13bae35b104d4d9a139ee1
Posté le 21 septembre 2018 - 14:42
Bonjour,

Petit Précision la key exacte est Test123 Sorry.

https://fr.functions-online.com/hash.html = 93ede6b9a77d6b8d6ec9d82bfdfccd65
https://www.tools4noobs.com/ = 93ede6b9a77d6b8d6ec9d82bfdfccd65
https://crypter.online/haval128%2C3 = 93ede6b9a77d6b8d6ec9d82bfdfccd65

Il semblerait donc que le problème vient bien de cette partie de la procédure.
Key est un Buffer = HexaVersBuffer("93ede6b9a77d6b8d6ec9d82bfdfccd65")
MessageCryp est un Buffer = HexaVersBuffer("07e879898c3f231f766ae58e79f884e7761147dcf1a2b454a9b74cd04e1666cfa3030769b2e4a7e61218e12268f9881a)
sRésultats est un Buffer = DécrypteStandard(MessageCryp, Key, crypteAES128,crypteCBC,cryptePaddingZéro)
Info(sRésultats) //Z.RD^ H`31I¾¥^†5ÏY>OÍvØßõy:

J'ai déjà tester sans la conversion HexaBuffer et UF8VersAnsi.


Merci de votre aide...
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 21 septembre 2018 - 16:11
En faisant ça,
Key est un Buffer = HashChaîne(HA_MD5_128,ChaîneVersUTF8("Test123"))
Trace(BufferVersHexa(Key))


Je tombe sur la même clé que sur ton site.
68 EA CB 97 D8 6F 0C 46 21 FA 2B 0E 17 CA BD 8C


Par contre je pense que leur cryptage est faux car si tu décryptes leur propre chaine cryptée, tu te retrouves avec 2 caractères "NUL" en fin de chaine.

Il faut donc bien que tu passes toutes chaînes en UTF8 avant toute opération

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
9 messages
Posté le 21 septembre 2018 - 22:50
***Solution trouvée***

Ne trouvant pas pourquoi le décodage via DécrypteStandard ne fonctionnais pas j'ai écrit une procédure php pour être sur des données transmise récupérée.

----------- PHP--------------

<?php

$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");

echo base64_encode($key) . "\n";


# Montre la taille de la clé utilisée ; soit des clés sur 16, 24 ou 32 octets pour
# AES-128, 192 et 256 respectivement.
$key_size = strlen($key);

$plaintext = base64_encode("Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.");

# Crée un IV aléatoire à utiliser avec l'encodage CBC
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

# Crée un texte cipher compatible avec AES (Rijndael block size = 128)
# pour conserver le texte confidentiel.
# Uniquement applicable pour les entrées encodées qui ne se terminent jamais
# pas la valeur 00h (en raison de la suppression par défaut des zéros finaux)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC, $iv);

# On ajoute le IV au début du texte chiffré pour le rendre disponible pour le déchiffrement
$ciphertext = $iv . $ciphertext;

# Encode le texte chiffré résultant pour qu'il puisse être représenté par une chaîne de caractères
$ciphertext_base64 = base64_encode($ciphertext);

echo "\n". $ciphertext_base64 . "\n";

?>

----résultat php---------
Clé en base64 : vLBLfhA6DNi1R2MFHO8IvFWr4Cn9665eHUF+L/sqAKM=
Réponse en Base64 : Ps+khm/hwv04vQL+u9hW1J4XLdDue48u324wAhJS31tabE5qPWPitkA5EPMMESEvK0HJ/8zR88tA2/QI6OSln+64scG69YV43gGuSVsC3z4qXOpKWDZVYoYMpS8AQCsUuBDErrGkImkWkssYEtGb2Cx2+FHNOIa4Gn65jfJ9Z78=


-------Décodage windev-----------
bufCle est un Buffer = Décode("vLBLfhA6DNi1R2MFHO8IvFWr4Cn9665eHUF+L/sqAKM=",encodeBASE64)
//CrypteStandard(sMessage, bufCle, crypteAES128)
bufCrypte est un Buffer = Décode("Ps+khm/hwv04vQL+u9hW1J4XLdDue48u324wAhJS31tabE5qPWPitkA5EPMMESEvK0HJ/8zR88tA2/QI6OSln+64scG69YV43gGuSVsC3z4qXOpKWDZVYoYMpS8AQCsUuBDErrGkImkWkssYEtGb2Cx2+FHNOIa4Gn65jfJ9Z78=",encodeBASE64)
// Décryptage en WLangage
sRésultat est un Buffer = DécrypteStandard(bufCrypte, bufCle, crypteAES256,crypteCBC,cryptePaddingZéro)
Info(UTF8VersAnsi(Décode(sRésultat,encodeBASE64)))


Résultat : "Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding."

---------------------------------------------------------------------------------------
Philippe SB :
"Il faut donc bien que tu passes toutes chaînes en UTF8 avant toute opération."

Merci mais j'avais testé UTF8versAnsi sur chaque chaîne avant le décryptage. cela ne change rien réponse incohérent lors du décryptage.

Merci de votre aide.
Membre enregistré
102 messages
Popularité : +4 (4 votes)
Posté le 22 septembre 2018 - 12:04
Salut,
Si je comprend bien, si DécrypteStandard() parvient à décrypter la phrase, c'est parce qu'il utilise cette méthode.
Hors php.net indique que mcrypt_get_iv_size et mcrypt_encrypt sont obsolètes et mcrypt_create_iv a même été supprimée...
Est-ce à dire que DécrypteStandard est lui-même obsolète ?!?!
...l'algorithme crypteAES256 n'est portant dispo que depuis WM23.
Membre enregistré
9 messages
Posté le 23 septembre 2018 - 00:55
Bonjour,

Oui mcrypt_encrypt est bien obselet mais il ne remettte pas en causse sont efficacité mais d'après les info sur http://php.net. L'extension mcrypt est assez complexe à utiliser. Elle a donc été déprécié en faveur de OpenSSL, et elle sera retirée du noyau et dans PECL en PHP 7.2.

Sauf erreur ce n'est pas la fonction mcrypt() qui est garante de la qualité du cryptage mais les argument utilisé pour le crypte ainsi que la clé de hash.

Bàt

Pour informations DécrypteStandard() permet de décrypté les message crypté avec la fonction openssl utilisée en version 7.2

Bàt