| |
Posté le 29 août 2017 - 08:31 |
Bonjour, je cherche à crypter une url en Blowfish CBC qui sera décryptée en PHP. Je n'arrive pas au bon cryptage avec les fonctions WinDev. Est ce que quelqu'un aurait un exemple de code pour m'aiguiller.
Merci.
>Fabien. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 29 août 2017 - 12:02 |
Bonjour,
Je ne suis pas sûr que le blowfish soit supporté par windev, si ce n'est en java et php.
Ton URL doit obligatoirement être en blowfish ou tu as la main sur le script php et c'est modifiable ?
-- Cordialement,
Philippe SAINT-BERTIN >Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 59 messages |
|
Posté le 29 août 2017 - 15:14 |
Bonjour Philippe,
>non je n'ai pas le choix je dois crypter avec l'algo Blowfish cbc et effectivement j'ai beau retourner la chose dans tous les sens je n'y arrive pas avec WinDev. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 29 août 2017 - 15:30 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 59 messages |
|
Posté le 29 août 2017 - 16:19 |
j'avais déjà regardé, mais là je ne maitrise pas du tout. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 29 août 2017 - 17:30 |
Bonjour, Une solution «temporaire» (en attendant mieux)
Avec un champ activeX -Microsoft Web Browser (etat invisible)
Initialisation de l'activeX
ActiveX1>>Navigate("http://sladex.org/blowfish.js/")
Code d'un boutton :
ActiveX1>>Navigate("javascript:blowfish.encrypt('texte à crypter', 'clef de codage', {cipherMode: 1, outputType: 0})") Multitâche(100) Trace(ActiveX1>>Document>>body>>outertext) ExécuteTraitement(ActiveX1,trtInit) > |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 29 août 2017 - 18:21 |
Oui ça pourrait le faire ou il te reste la solution de créer une page php en localhost à laquelle tu passes ton texte et ta clé et tu récupères le texte crypté par un echo.
-- Cordialement,
Philippe SAINT-BERTIN >Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 29 août 2017 - 21:15 |
Bonsoir, Seconde méthode, via un script PHP : bf.php Pour un serveur APACHE2 sous Linux, copier ce script dans /var/www/html avec les droits 0755
/* Exemple d'appel avec Windev. // codage IF HTTPRequête("http://adresse_serveur/bf.php?action=code&buffer=philippe%20pasquali") THEN Trace(HTTPDonneRésultat(httpRésultat)) END // décodage IF HTTPRequête("http://adresse_serveur/bf.php?action=decode&buffer=c2q0ALjnb88Qjch0vGfXBT9mDhOLjGTY") THEN Trace(HTTPDonneRésultat(httpRésultat)) END */ class cipher {
private static $mode = 'MCRYPT_BLOWFISH'; private static $key = 'q!2wsd#45^532dfgTgf56njUhfrthu&^&ygsrwsRRsf';
public static function encrypt($buffer){ $iv = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND); $passcrypt = mcrypt_encrypt(constant(self::$mode), self::$key, $buffer, MCRYPT_MODE_ECB, $iv); $encode = base64_encode($passcrypt); return $encode; }
public static function decrypt($buffer){ $decoded = base64_decode($buffer); $iv = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND); $decrypted = mcrypt_decrypt(constant(self::$mode), self::$key, $decoded, MCRYPT_MODE_ECB, $iv); return $decrypted; }
} //----- data $mystring = $_GET["buffer"]; if ($mystring == '') { echo ""; return; }
//----- action 'code' ou 'decode' $action = $_GET["action"]; if ($action == 'code') { $mystring = cipher::encrypt($mystring); echo $mystring; } elseif ($action == 'decode') { $mystring = cipher::decrypt($mystring); echo $mystring; } else { echo ''; } return ?> > |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 59 messages |
|
Posté le 30 août 2017 - 09:29 |
Bonjour,
tout d'abord merci d'avoir pris le temps de me répondre. Je viens d'essayer avec sladex et je n'obtient pas le résultat attendu. En fait la chaine à crypter est "DILICOM:9782000000006-3010000000006" la clé de cryptage est "motdpasseDilicom" et j'ai un vecteur d'initialisation "00000000"
et le résultat à obtenir est YVV2myd52pjPexG2wGveNSgRgdsT-PfaxI4MxC9WYQEz5alOtdHD4Q
>fabien. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 30 août 2017 - 11:05 |
Bonjour, Je suppose que vous n'avez pas communiqué le véritable mot de passe... Voici le code PHP modifié (si vous pouvez pas le tester prévenez moi)
class cipher {
private static $mode = 'MCRYPT_BLOWFISH'; private static $key = 'motdpasseDilicom'; //Mettre ici le bon mot de passe
public static function encrypt($buffer){ $iv . "00000000"; // Vecteur $passcrypt = mcrypt_encrypt(constant(self::$mode), self::$key, $buffer, MCRYPT_MODE_CBC, $iv); $encode = base64_encode($passcrypt); return $encode; }
public static function decrypt($buffer){ $decoded = base64_decode($buffer); $iv . "00000000"; // Vecteur $decrypted = mcrypt_decrypt(constant(self::$mode), self::$key, $decoded, MCRYPT_MODE_CBC, $iv); return $decrypted; }
} //----- data to encode ou decode $mystring = $_GET["buffer"]; if ($mystring == '') { echo ""; return; }
//----- action encode ou decode $action = $_GET["action"]; if ($action == 'code') { $mystring = cipher::encrypt($mystring); echo $mystring; } elseif ($action == 'decode') { $mystring = cipher::decrypt($mystring); echo $mystring; } else { echo ''; } return ?> > |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 30 août 2017 - 14:44 |
Bonjour,
Perso, j'ai fait un truc tout bête, j'ai saisi le code suivant dans une page et je l'ai affichée. Voici ce que je récupère:
echo base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, "motdpasseDilicom", "DILICOM:9782000000006-3010000000006", MCRYPT_MODE_CBC, "00000000"))
YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQHW4dXU3o79yg==
Je n'ai donc pas la même chose que toi . Es tu sûr de la valeur YVV2myd52pjPexG2wGveNSgRgdsT-PfaxI4MxC9WYQEz5alOtdHD4Q ?
Au passage, la fonction mcrypt_encrypt est passée en deprecated depuis php 7.1 et sera supprimée dans php 7.2, attention donc à la version de php installée sur ton serveur. -- Cordialement,
Philippe SAINT-BERTIN >Géode InformatiqueMessage modifié, 30 août 2017 - 14:46 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 31 août 2017 - 10:24 |
Bonjour J'ai du faire une erreur dans mon code PHP (je suis débutant dans ce langage...) Après simplifications je trouve le même résultat que «Philippe SB».
Voulant vérifier avec une autre méthode, j'ai récupéré blowfish.js sur la page «http://sladex.org/blowfish.js/» J'ai interfacé ce code JS avec Windev en utilisant l'assemblage "System.Windows.Forms" et la classe WebBrowser. Résultat : YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQEz5alOtdHD4Q== ('+' à la place du '- et "==" à la fin) Théorie : YVV2myd52pjPexG2wGveNSgRgdsT-PfaxI4MxC9WYQEz5alOtdHD4Q >PHP : YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQHW4dXU3o79yg== |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 31 août 2017 - 10:41 |
ps >sur une bonne dizaine de site testé je n'ai jamais eu le même résultat sauf sur 1 site ou j'obtiens le résultat du script PHP....... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 59 messages |
|
Posté le 31 août 2017 - 11:18 |
Bonjour,
tout d'abord un grand merci à tous les deux pour votre aide. J'attends encore une réponse du fournisseur de mon client pour des infos complémentaires. Eux me conseille de passer par un script Shell :
#encrypt key_hex=`echo -e "print '${key}'.encode('hex')" | python` iv_hexa=`echo -e "print '${iv}'.encode('hex')" | python` #final encrypt blowfich cbc result=`echo -n " DILICOM:${ean}-${emet}" | openssl enc -bf-cbc -nosalt -K "${key_hex}" -iv "${iv_hexa}" | openssl enc -base64 | tr '+' '-' | tr '/' '_' | tr '=' ' '` echo $result link = " http://images1.centprod.com/3025592163107/[9]" + result + "-cover-medium.jpg";
Philippe P : tu as réussis à obtenir YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQEz5alOtdHD4Q== directement dans WinDev ? je serai très intéressé par le code que tu as utilisé. Si tu veux tu peux me contacter via l'adresse fabien.wambst@g-sys.lu
>Fabien. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 31 août 2017 - 11:59 |
tu as réussis à obtenir YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQEz5alOtdHD4Q== directement dans WinDev ? je serai très intéressé par le code que tu as utilisé. Si tu veux tu peux me contacter via l'adresse fabien.wambst@g-sys.lu
Non j'ai eu ce résultat par une page php installée en local. Il n'y a plus qu'à l'appeler par un httprequete et le tour est joué. Mais encore faut-il que le résultat soit bien celui attendu par ton fournisseur.
-- Cordialement,
Philippe SAINT-BERTIN >Géode InformatiqueMessage modifié, 31 août 2017 - 12:00 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 31 août 2017 - 12:31 |
Fabien WAMBST a écrit :
Philippe P : tu as réussis à obtenir YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQEz5alOtdHD4Q== directement dans WinDev ? je serai très intéressé par le code que tu as utilisé. Si tu veux tu peux me contacter via l'adresse fabien.wambst@g-sys.lu Fabien.
Bonjour, Le résultat est bien récupéré directement dans Windev. J'avoue que je suis débutant en JS et que j'en suis au stade découverte du .NET alors Il faut voir ce code comme une étude...
1) Récupération du script à l'adressehttp://sladex.org/blowfish.js/ext/blowfish.jset enregistrement dans ComplèteRep(fRepEnCours())+"blowfish.js"
2) Avec Notepad++ création d'une page ComplèteRep(fRepEnCours())+"blowfish.html"
/////début du fichier blowfish.html///// <html> <body> <p id="data">default data</p> <p id="clef">default key</p> <p id="vecteur">default vecteur</p>
<script>
function Encode(){ var sData = document.getElementById("data").innerText; var sClef = document.getElementById("clef").innerText; var sVecteur = document.getElementById("vecteur").innerText; blowfish.setIV(sVecteur, 0); //sVecteur codé en base64 return blowfish.encrypt(sData, sClef, {cipherMode: 1, outputType: 0}); };
///// le scrip blowfish.js/////
///// fin de fichier blowfish.html ///// </script> </body> </html>
3) Dans Windev ajouter l'assemblage .NET «System.Windows.Forms»
4) Dans Windev code d'un bouton :
CodeHTMLest une chaîne UNICODE=fChargeTexte(ComplèteRep(fRepEnCours())+"blowfish.html") IFCodeHTML=""THEN RETOUR myWebBrowserest unWebBrowser myHtmlDocumentest unHtmlDocument dynamic myHtmlElementest unHtmlElement dynamic
ScriptNameest une chaîne UNICODE="encrypt" retourJSest une chaîne IdNameest une chaîne UNICODE
IFCodeHTML=""THEN RETOUR myWebBrowser:DocumentText=CodeHTML
WHILEmyWebBrowser:DocumentText<>CodeHTML Multitâche(1) END
myHtmlDocument=myWebBrowser:Document IFmyHtmlDocument<>Null THEN IdName="data" myHtmlElement=myHtmlDocument:GetElementById(IdName) myHtmlElement:InnerText="DILICOM:9782000000006-3010000000006"
IdName="clef" myHtmlElement=myHtmlDocument:GetElementById(IdName) myHtmlElement:InnerText="motdpasseDilicom"
IdName="vecteur" myHtmlElement=myHtmlDocument:GetElementById(IdName) myHtmlElement:InnerText=Crypte(Répète("0",8),"",crypteAucun,encodeBASE64)
ScriptName="Encode" retourJS=myWebBrowser:Document:InvokeScript(ScriptName) IFretourJS="0"THEN RETOUR ELSETrace(retourJS) END
>il y a surement plein d'autres façon de le faire |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 31 août 2017 - 19:28 |
En regardant le script shell j'ai compris pourquoi je n'obtenais pas exactement la même chose : YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQEz5alOtdHD4Q== au lieu de YVV2myd52pjPexG2wGveNSgRgdsT-PfaxI4MxC9WYQEz5alOtdHD4Q car à la fin du script il y a : tr '+' '-' | tr '/' '_' | tr '=' ' '` qui remplace le '+' en '-', le '/' en '_' et supprime les '='
La commande Linux «openssl» donne la même chose que le script «blowfish.js» pas PHP ! Mais comme à souligné Philippe SB, «la fonction mcrypt_encrypt est passée en deprecated depuis php 7.1 et sera supprimée dans php 7.2» >Donc à éviter |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 01 septembre 2017 - 06:32 |
Bonjour,
Sinon voici le script php qui fonctionne depuis php 5 et qui est le remplaçant de mcrypt_encrypt. C'est plus simple que le code js en comprehension. Il te suffit de déployer une page php sur un serveur avec le support de openssl
Du coup basé sur le script de Philippe:
$mystring = $_GET["buffer"]; if ($mystring === ""){ echo ""; return; }
static $key = 'motdpasseDilicom'; static $iv = "00000000"; echo base64_encode(openssl_encrypt($mystring ,"BF-CBC",$key,OPENSSL_RAW_DATA, $iv)); ?>
L'appel de la page:
http://localhost/cipher.php?buffer=DILICOM:9782000000006-3010000000006*
Resultat: YVV2myd52pjPexG2wGveNSgRgdsT+PfaxI4MxC9WYQEz5alOtdHD4Q==
Un simple httprequete, httpdonneresultat te donne ce que tu souhaites.
-- Cordialement,
Philippe SAINT-BERTIN >Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 59 messages |
|
Posté le 01 septembre 2017 - 08:33 |
Bonjour,
un grand merci à tus les deux. Cela faisait un moment que j'étais bloqué sur ce point.
>Fabien. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 messages |
|
Posté le 20 avril 2018 - 09:50 |
Bonjour à tous,
Je déterre le sujet un peu tard mais Fabien je suis face à la même situation que toi, comment as-tu procéder pour le cryptage du coup ?
Merci de ta réponse.
Bonne journée
Cordialement
-- >Nicolas Guiot |
| |
| |
| | | |
|
| | |