|
| crypteStandart et openssl php >= 7 |
| Iniciado por The beginner, 14,jul. 2019 17:25 - 4 respuestas |
| |
| | | |
|
| |
Miembro registrado 5 mensajes |
|
| Publicado el 14,julio 2019 - 17:25 |
Bonjour a tous, Je suis coincé avec la fonction crypteStandard et avec une api qui décrypte avec openssl_decrypt
coté Windev dans l'expression la plus simple:
"{ "compteID":40 }" bufConsumer est un Buffer = "6B343EE61E4391F6B3D2D701B5723B0D50A981E085A3B416CF7AD09A8049BF73"; bufValeur est un Buffer = ChaîneVersUTF8(cValeur) chaineCrypte est un Buffer = CrypteStandard(bufValeur, bufConsumer[[À 32]], crypteAES256,crypteCBC,cryptePaddingZéro)
RENVOYER Encode(chaineCrypte,encodeBASE64)
Coté php toujours dans l’expression la plus simple:
$data = base64_decode($request->get('data'));
$consumer = '6B343EE61E4391F6B3D2D701B5723B0D50A981E085A3B416CF7AD09A8049BF73'; $IV = substr($data,0 , $iv_size); $data = substr($data, $iv_size); $chaine = openssl_decrypt($data,'AES-256-CBC', substr($consumer, 0, 32), OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $IV);
Mon résultat de décodage est plutôt surprenant:
[2019-07-14 16:47:23] local.DEBUG: array ( 'data' => 'DCglypTepxa2cLtbSDWe543072lU6qZ5NRT4WtCYVySO07Kr', 'IV' => 'KDWuAm20W+SZHV5s', 'decrypter' => '1����-#.���d�`i�C�N����L\'�����V�P��}G�q �(', 'error' => false, )
j'effectue les mêmes test coté .net avec le même mode cryptage AES-256-CBC et cela fonctionne. Je pense que coté Windev je dois certainement oublié une conversion de type avant mon appel.
Merci pour votre aide |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 15,julio 2019 - 08:58 |
Bonjour,
Il me semble que tu oublies de convertir le buffer "bufConsumer" en utf8.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 5 mensajes |
|
| Publicado el 15,julio 2019 - 10:19 |
Bonjour Philippe,
Merci pour ta réponse La conversion en UTF-8 ne change malheureusement rien. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 17,julio 2019 - 08:27 |
Une chose que je peux dire c'est que encode renvoie des données avec des RC au bout d'un certain nombre de caractères. Es-tu sûr que toute la chaîne est bien passée au php ou qu'il n'ya pas un caractère parasite au milieu de tout ça ?
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 5 mensajes |
|
| Publicado el 29,julio 2019 - 14:45 |
Bonjour, je fais un retour final de la mise en place: Nous utilisons Windev 24 et une api Rest distribué sous laravel avec php 7.2. Malgré les différentes lectures du même genre de problème de notre coté cela extrêmement simple. Pas encodage, pas conversion UTF-8.
coté Windev un simple :
Procedure encrypt(cValeur est un Buffer) : Buffer bufConsumer est un Buffer = "6B343EE61E4391F6B3D2D701B5723B0D50A981E085A3B416CF7AD09A8049BF73" bufValeur est un Buffer = cValeur chaineCrypte est un Buffer = CrypteStandard(bufValeur, bufConsumer[[À 32]], crypteAES256,crypteCBC)
RENVOYER chaineCrypte
Procedure getApi(bufData est une Buffer) : chaîne
vContenu est un Variant vContenu.data = CEndPoint.encrypt(bufData)
Data est un Buffer = VariantVersJSON(vContenu) serviceUrl est une restRequête serviceUrl.URL = "http://uri" serviceUrl.Méthode = httpPost serviceUrl.ContentType = "application/json" serviceUrl.Contenu = Data serviceResponse est une restRéponse serviceResponse = RESTEnvoie(serviceUrl) SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) ELSE RENVOYER serviceResponse.Contenu FIN
clAgency est un objet Agence clAgency.name = "Bonjour je suis moi" clAgency.address = "Je suis ici. \n\rA cette endroit." test est Buffer Serialize(clAgency, test, psdJSON)
sRetourEndPoint est une chaîne = clEndpoint.getApi(test) Désérialise(clAgency, test, psdJSON) Le retour d'appel n'est pas crypté avec cette exemple.
Coté PHP
$iv_size = openssl_cipher_iv_length('AES-256-CBC'); $data = base64_decode($request->get('data')); $consumer = '6B343EE61E4391F6B3D2D701B5723B0D50A981E085A3B416CF7AD09A8049BF73'; $IV = substr($data,0 , $iv_size); $data = substr($data, $iv_size); $chaine = openssl_decrypt($data,'AES-256-CBC', substr($consumer, 0, 32), OPENSSL_RAW_DATA, $IV); return json_decode(rtrim($chaine), true);
L'utilisation du rtrim est la uniquement pour supprimer la série d'octet(s) de fin de chaîne. |
| |
| |
| | | |
|
| | | | |
| | |
|