|
crypteStandart et openssl php >= 7 |
Débuté par The beginner, 14 juil. 2019 17:25 - 4 réponses |
| |
| | | |
|
| |
Membre enregistré 5 messages |
|
Posté le 14 juillet 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 15 juillet 2019 - 08:58 |
Bonjour,
Il me semble que tu oublies de convertir le buffer "bufConsumer" en utf8.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 15 juillet 2019 - 10:19 |
Bonjour Philippe,
Merci pour ta réponse La conversion en UTF-8 ne change malheureusement rien. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 17 juillet 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 29 juillet 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. |
| |
| |
| | | |
|
| | | | |
| | |
|