PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Help : Cryptage - Décryptage
Help : Cryptage - Décryptage
Iniciado por M.Damien, set., 20 2018 8:19 AM - 10 respostas
Publicado em setembro, 20 2018 - 8:19 AM
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.
Membro registado
2.571 mensagems
Popularité : +222 (260 votes)
Publicado em setembro, 20 2018 - 11:29 AM
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
Publicado em setembro, 20 2018 - 2:01 PM
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
Membro registado
2.571 mensagems
Popularité : +222 (260 votes)
Publicado em setembro, 20 2018 - 3:10 PM
L'algorithme de hachage pour la clé doit-il obligatoirement être haval128,3 ?

--
Cordialement,

Philippe SAINT-BERTIN
Publicado em setembro, 20 2018 - 8:10 PM
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...
Membro registado
940 mensagems
Popularité : +66 (68 votes)
Publicado em setembro, 21 2018 - 10:29 AM
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
Publicado em setembro, 21 2018 - 2:42 PM
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...
Membro registado
2.571 mensagems
Popularité : +222 (260 votes)
Publicado em setembro, 21 2018 - 4:11 PM
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
Membro registado
9 mensagems
Publicado em setembro, 21 2018 - 10:50 PM
***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.
Membro registado
102 mensagems
Popularité : +4 (4 votes)
Publicado em setembro, 22 2018 - 12:04 PM
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.
Membro registado
9 mensagems
Publicado em setembro, 23 2018 - 12:55 AM
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