PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Cryptage et Décryptage Key MRA
Cryptage et Décryptage Key MRA
Débuté par Thierry, 22 avr. 2024 21:05 - 5 réponses
Membre enregistré
3 messages
Posté le 22 avril 2024 - 21:05
Bonjour, je travaille sur un dossier genre facture X mais pour un client à l'Ile Maurice. Le principe est assez simple mais je coince à décrypter une clé envoyé par un site Gouvernemental MRA.

1) j'envoie une clef aléatoire crypter en 256 bit et encode en base64. C'est ma clé.
2) je m'identifie sur leur site je leur passe ma clé via une requête https.
3) je récupère leur réponse et ils me disent que c'est ok. Dans leur réponse ils me donne un token et une nouvelle clé de cryptage encodée en base64 et que je doit décrypter avec ma première clé. tout cela en AES256/ECB/PKCS5padding ou PKCS7padding.
4) je trouve leur clé et je doit crypter mes factures avec cette clé et leur envoyer tout cela. Et là je boucle sur une réponse ERROR.

Mon code est long comme le bras et difficile à mettre en ligne. Y a t il quelqu'un que à déjà travaillé avec le site MRA ? ou qui peux me donner un coup de main sur le décryptage de cette fameuse clé ?
Membre enregistré
2 574 messages
Popularité : +222 (260 votes)
Posté le 23 avril 2024 - 08:11
Quel est le le détail de la réponse ?

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
511 messages
Popularité : +18 (18 votes)
Posté le 23 avril 2024 - 10:37
Bonjour,

pour ceux que ce sujet intriguerait, voici des précisions et ressources ;

MRA = Mauritius Revenue Authority

Technical Guidelines - MRA INVOICING Developer Portal
https://www.mra.mu/download/InvoicingRegulations.pdf
:-)

--
Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/…
Membre enregistré
3 messages
Posté le 26 avril 2024 - 17:08
Bonjour,

Merci de vos question et précision, j'était transit pour rentrer en France. C'était un peu long.
Je n'ai pas beaucoup avancé, voici un exemple de problème que j'ai à l'envoi d'une facture :

Objet : Je doit envoyer une facture au MRA

je prépare une clef :

bufcle est un Buffer = "cidfpet LIGOSTd TE!SSCe5rAg8l+Ty" // ma clef 256 bit de base
WencryptKey est une chaîne = Encode(bufcle,encodeBASE64) / je dois l'encoderBASE64

La clef est à envoyer et en retour je lit SUCCESS.

{"status":"SUCCESS","responseId":"TK17141428312075565706250","requestId":"2024042616470873","token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJCRUxJTkRBLUlQQkQiLCJlYnNNcmFJZCI6IjE3MTE1MjY1NjE0NTU5VUVCTzBURDE0QiIsImV4cCI6MTcxNDE2MjQxMCwiaWF0IjoxNzE0MDc2MDEwfQ.uHxlgI4rMPOpmpH8S-C6sWUZ4EzHLsXIuXbNohsF4qH7xqoiZ18oTYexHvAZBx9BnhqeSdlVyvsRf5Q6MBO87g","key":"fPLYUJEXaZiH+S9oZSI4fupO/iKhBGh5bP2bpKlKL8alnD9WckeivG9LvAr8OjRL","expiryDate":"20240427 00:13:30"}

avec la Key qu'ils donnent ci-dessus je doit la décrypter avec ma clef WencryptKey et obtenir un seconde Key pour encrypter la facture à leur envoyer.
avec le token reçu.
Je ne suis pas sur du décryptage de leur clef, j'ai des résultats différents en testant avec des chaines ou des buffers et en final je crypte une facture en live total. Voici leur retour :

{"responseId":"LT17141428397375418686110","responseDateTime":"20240426 18:47:19","requestId":"2024042616470873","status":"ERROR","environment":"TEST","infoMessages":null,"errorMessages":[{"code":"ERR0200","description":"Could not decrypt invoice data"}],"fiscalisedInvoices":null}

Entre les cryptage et décryptage et les BASE64 je suis perdu. Ce qui me gène c'est que je fait cela au pif sans avoir les moyens de vérifier en cours de route.
Ce qui est dommage c'est qu'ils donnent un cheminement complet en C , en java et PHP. Pas de bol je suis un ancien de Clipper5 et je suis resté très basic en programmation.
Membre enregistré
3 messages
Posté le 26 avril 2024 - 17:21
Membre enregistré
3 897 messages
Popularité : +227 (347 votes)
Posté le 27 avril 2024 - 14:56
Bonjour,
A première vue, tu n'a pas besoin de décrypter. Il suffit de suivre de manière "bourrin" les algorithmes donné dans les chapitres 7 et 8.
A priori le problème que tu soulève en 3- n' pas lieu d'être. Il correspond à l'étape 1 du 7.1.10.
Tu reçois une clé d'envoi (chiffrée) que tu dois affecter au membre encrytKey de la structure Payload. A l'issue il suffit de sérialiser la structure en JSON et de chiffrer le résultat avec la clé publique qui t'est fournie (étape 2 et 3)

--
Il y a peut être plus simple, mais, ça tourne