PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Cryptage/Décryptage d'une chaine par des clés publiques (méthode RSA PKCS1)
Cryptage/Décryptage d'une chaine par des clés publiques (méthode RSA PKCS1)
Débuté par j.feyen, 09 déc. 2009 16:22 - 16 réponses
Posté le 09 décembre 2009 - 16:22
Bonjour,
j'ai crée un programme qui peut lire les données des nouvelles cartes tachygraphes électronique.

Pour vérifier l'authenticité des données contenu sur la carte, il existe des blocs de données cryptés par une clé publique de 1024 bits en méthode RSA.
Pour décrypter et vérifier les données j'utilise pour le moment une dll externe écrit en VB6. Mais sur certains PC's elle ne fonctionne plus. (Windows 7, Xp)
Alors je l'ai transcrit en WD, mais la elle s'éxécute 10 fois plus lentement qu'en VB.
La perte de vitesse vient du fait que des fonctions ETBinaire(), ... sont appellé 4 Millions de fois.
Comme je ne comprend pas vraiment le fonctionnement du décryptage, je n'arrive pas à améliorer le code.

Voici ma question:

Est-ce-que quelqu'un à déjà fait en Windev une fonction, classe, composant, API, exemple, code source, ... pour décrypter une chaîne RSA PKCS1 ?

>Merci
Membre enregistré
12 messages
Posté le 28 juillet 2016 - 15:52
Bonjour,

J'ai aujourd'hui la même problématique : je doit signer des enregistrement en BDD avec une clé asymétrique (RSA ou Elliptic Curve) et créer un outil capable d'authentifier une signature.

J'ai tenté de trouver des solutions externes via des scripts C++, Java et PERL mais il y a toujours un blocage technique.
En C++, il semble que la bibliothèque sur laquelle repose la solution (GMP) soit un peu foireuse.
J'ai réussi en Java à générer des fichiers à partir d'objets sérialisés contenant les clés privées et publiques. Mais la création d'objets en dé-sérialisant les fichiers ne permet pas le décryptage ou l'encryptage.
En PERL, je génère des clés à copier/coller mais je ne réussi pas à créer des objets à partir de ces signatures du fait du format non reconnu.
Bref, c'est la loose ...

Je serais intéressé de savoir si JF a trouvé une solution de son côté (après 7 ans, soit il a trouvé soit il a biaisé) ou si quelqu'un a eu une problématique similaire et a réussi à la résoudre.

--
>Martial - ACDL informatique
Membre enregistré
12 messages
Posté le 17 août 2016 - 14:46
Bonjour

Merci beaucoup Bastiencb, facile a mettre en place

>Cordialement
Membre enregistré
12 messages
Posté le 18 août 2016 - 17:28
Bonjour

Pas de problème pour l'utilisation de ta Bibliothèque sur ma machine de développement
Je viens de créer un exécutable et je l'ai installé sur un poste client
J'ai recopie ta bibliothèque RSA.DLL dans le répertoire C:\Program Files (x86)\COMMERCIAL\
Mais quand j'utilise ta bibliothèque, j'ai une erreur

Appel WL :
Traitement de 'Clic sur BTN_Appliquer' (FEN_Test.BTN_Appliquer), ligne 65, thread 0

Que s'est-il passé ?
Vérifiez que le framework .NET est bien disponible sur la machine.
Vérifiez que 'Visual Studio 2010 Redistributable Package' est installé sur la machine.
Le chargement de la DLL C:\Program Files (x86)\COMMERCIAL\wd210net4.dll a échoué

Code erreur : 1065
Niveau : erreur fatale

Code d'erreur système : 126
Message d'erreur système :
Le module spécifié est introuvable.

Dump de l'erreur du module 'wd210vm.dll' (21.0.317.0).
Identifiant des informations détaillées (.err) : 1065
Informations de débogage :
DLL qui provoque le chargement : WDVM
DLL a charger : wd210net4.dll
DLL chargee : C:\Program Files (x86)\COMMERCIAL\wd210net4.dll
Chemin des DLL : C:\Program Files (x86)\COMMERCIAL
Chemin de l'EXE : C:\Program Files (x86)\COMMERCIAL\
Informations supplémentaires :
EIT_PILEWL :
Clic sur BTN_Appliquer (FEN_Test.BTN_Appliquer), ligne 65
Initialisation de VersionF (), ligne 106
EIT_DATEHEURE : 18/08/2016 17:22:29
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <18>

Qu'est ce que je dois déclarer et mettre dans l'installation de mon programme pour ne plus avoir ce problème ?

Merci beaucoup
>J.Carroll
Posté le 19 août 2016 - 10:09
Bonjour Bastien,
Je suis heureux d'être tombé sur ta solution, cependant, l'import de l'assemblage m'indique une erreur :

Erreur lors de l'importation de l'assemblage <RSA.7z>.
Vérifiez que le fichier importé est bien un assemblage .NET.
Vérifiez que la version du framework .NET installé est au moins égale à la version du framework .NET utilisé pour compiler cet assemblage.
Si l'assemblage référence d'autres assemblages, vérifiez qu'ils sont présents dans le même répertoire ou dans le GAC (répertoire <Windows>\assembly).
Echec de l'ouverture des metadata de l'assemblage <C:\Mes projets\Front\Exe\RSA.7z>.
Erreur -2146234098

>Auriez vous une idée sur l'erreur d'import svp?
Posté le 19 août 2016 - 19:13
Bernard ;);

Le fichier RSA.7z est un fichier compressé.

>Avant d'importer la dll dans Windev, il faut l'extraire avec l'utilitaire 7-zip par exemple.
Posté le 19 août 2016 - 19:18
J.Carroll;

Pour faire fonctionner des dll c# il est nécessaire d'installer les packages redistribuables Visual C++ pour Visual Studio 2013 sur le poste concerné :

https://www.microsoft.com/fr-fr/down....aspx…>
Membre enregistré
12 messages
Posté le 21 août 2016 - 08:31
Bonjour

Pour repondre a B Tapie
(tu marques que tu importes RSA.7Z , j'espere que tu dezippes RSA.7Z et que tu installes RSA.DLL)

Sinon Pas eut de probleme pour installer la RSA.DLL dans windev 21 (mais plantage avec windev 15 , pas reconnu , bien recupere dans le projet
mais plante a l'utilisation)

Ca marche bien, mais faut souvent installer en meme temps "Visual Studio 2010 Redistributable Package" (que tu trouves partout ), une fois installer ca marche a 99%. Le cote chiant, c'est les mises a jour automatique de mes logiciels, je suis oblige de me connecter sur les postes et installer le visual , ca fait une belle perte de temps.

>Cordialement
Membre enregistré
5 messages
Posté le 30 août 2016 - 16:20
Merci J Carroll et BastienCB, tout semble OK pour moi à présent pour signer des chaînes de caractères.
savez vous si l'on peut signer un ficher avec cette méthode svp ?
>Par avance merci...
Membre enregistré
12 messages
Posté le 30 août 2016 - 17:01
Bonjour

Je ne pense pas, pour signer mes fichiers je passe par un Hascode avec l'ordre

HashFichier( HA_SHA_160 , sMonfichier )

>ca marche tres bien
Membre enregistré
12 messages
Posté le 13 septembre 2016 - 17:39
Bonjour

Je sens que je vais poser une question bête, mais bon c'est la vie;)

mais est ce normal avec ta bibliothèque, qu'avec le même texte a déchiffrer, les mêmes clés Publiques et Privées
Je trouve une chaîne chiffrée toujours différente ?

Je compte l'utiliser pour la norme NF525 et je dois fournir donc une chaîne et la chaîne chiffrée (avec la clé publique de cette chaîne)

sChaineChiffree = RSATool.RSAEncrypt(sChaineAChiffrer,gsClePublique,sMessERR,gniKeySize,gbOAEPPadding)

mais si le calcul ne donne pas toujours le même résultat, comment vont ils vérifier ?

Avec ta dll, j'ai l'impression que je dois plus-tot donner la clé privée et garder ma clé publique
ou alors j'ai rien compris au Systeme de clé

>Cordialement
Membre enregistré
52 messages
Posté le 13 septembre 2016 - 19:07
J.Carroll a écrit :
Bonjour

Je sens que je vais poser une question bête, mais bon c'est la vie

mais est ce normal avec ta bibliothèque, qu'avec le même texte a déchiffrer, les mêmes clés Publiques et Privées
Je trouve une chaîne chiffrée toujours différente ?

Je compte l'utiliser pour la norme NF525 et je dois fournir donc une chaîne et la chaîne chiffrée (avec la clé publique de cette chaîne)

sChaineChiffree = RSATool.RSAEncrypt(sChaineAChiffrer,gsClePublique,sMessERR,gniKeySize,gbOAEPPadding)

mais si le calcul ne donne pas toujours le même résultat, comment vont ils vérifier ?

Avec ta dll, j'ai l'impression que je dois plus-tot donner la clé privée et garder ma clé publique
ou alors j'ai rien compris au Systeme de clé

Cordialement


Bonjour,
Pour respecter la NF 525, crypter les fichiers dans l'analyse Windev + un hash de contrôle sur chaque ligne de facture ne suffit-il pas ?
Le but est d'éviter la fraude, non ? donc cette double sécurité devrait suffire il me semble.
>Cordialement.
Posté le 26 septembre 2016 - 05:55
Bonjour BastienCB,,
et autres amis WinDev ayant utilisé RSA.dll,

Je suis heureux de découvrir vos discutions sur RSA, car je suis en train de travailler sur le sujet NF525.
J'ai pu installer votre RSA.dll sur mon poste développement dans le sous répertoire exe de mon projet.
Le dézippage de RSA.7z OK, Atelier/NET/... OK, Install Visuel C++ 2013 redist... OK.
Création de 3 procédures en suivant vos modèles : générer les clés, chiffrer, déchiffrer : compilation OK sous WinDev 21

Ma première exécution pour la création des clés se plante avec le message suivant :
Erreur à la ligne 28 du traitement Procédure globale pGenererLesCles.
L'objet <RSATool> est inconnu dans l'assemblage <C:\Mes Projets NF525\ProCashNF525\Exe\RSA.dll>.
Vérifier que la version de l'assemblage <C:\Mes Projets NF525\ProCashNF525\Exe\RSA.dll> utilisée en exécution est la même que la version utilisée pour la compilation du projet.
L'objet de type <RSA.RSATool> (assemblage <C:\Mes Projets NF525\ProCashNF525\Exe\RSA.dll>) n'a pas pu être créé
L'assemblage <C:\Mes Projets NF525\ProCashNF525\Exe\ProCashNF525\RSA.dll> n'a pas pu être ouvert
Le framework .NET a renvoyé l'erreur suivante :
Impossible de charger le fichier ou l'assembly 'file:///C:\Mes Projets NF525\ProCashNF525\Exe\ProCashNF525\RSA.dll' ou une de ses dépendances. Le fichier spécifié est introuvable.
L'assemblage <RSA> n'a pas pu être ouvert

Il est curieux de constater qu' un sous répertoire vide "Exe\ProCashNF525\RSA.dll" soit créé tout seul.
ET WinDev est allé charger le dll dans ce sous répertoire.
J'ai essayé de dupliquer le dll dans ce sous répertoire. Le dll copié est effacé tout seul après l'exécution de la procédure de création des clés.

J'avais installé au début la version Visual 2015 . En pensant que le problème vient de la version 2015 et j'ai réinstallé la version Visual C++ 2013 redistr avec succès mais j'ai toujours le même problème de plantage.

un grand Merci de m'éclairer

>Vincent
Posté le 28 juin 2017 - 20:47
impliqué dans le passage des caisses et autres logiciels aux nouvelles normes. J'ai réalisé ce composant (cryptage RSA)
http://www.ebinfo.fr/windev-cryptage-rsa.html
ça devrait vous aider
>cordialement
Membre enregistré
952 messages
Posté le 29 juin 2017 - 11:07
pour la marque NF525,
il est demandé de générer un HASH de certaines rubriques d'un enregistrement (selon le type d'enregistrement) , puis de générer une Signature et non pas un cryptage de ce HASH.

- avec une signature vous obtiendrez toujours la même valeur avec des données d'origine identique
- avec un cryptage vous obtiendrez toujours une valeur différente avec des données d'origine identique

- avec une signature vous ne pourrez pas obtenir les données d'origine mais uniquement contrôler si des données correspondent à votre signature ( vérification de signature )
- avec un cryptage vous pourrez obtenir les données d'origine. ( décryptage )

- génération d'une signature s'effectue avec la clé privée , la vérification de la signature s'effectue grâce à la clé publique
- génération d'un cryptage RSA s'effectue avec la clé publique , le décryptage ne peu se faire qu'avec la clé privée.

Attention aux fonctions Windev , CertificatSigneChaine() car ces dernières inclus la clé publique dans la chaîne résultat et si vous souhaitez répondre à la marque NF525 qui vous impose d'apposer certaine position de la signature sur vos impressions tickets/factures vous risquez d'imprimer des valeurs de votre clé publique.... et non de la chaîne signée...

>bon dèv.
Membre enregistré
52 messages
Posté le 01 juillet 2017 - 18:43
Christophe a écrit :
- avec une signature vous obtiendrez toujours la même valeur avec des données d'origine identique
- avec un cryptage vous obtiendrez toujours une valeur différente avec des données d'origine identique


quand on crypte on obtient aussi la même valeur avec des données d'origine identique, non ???

Sans vouloir correspondre à la marque NF525, mais uniquement pour respecter les contraintes légales peut-on s'en tenir à :
1/ pour chaque facture (et lignes de facture) :
ajouter un HashPrecedent, calculé sur la ligne en cours et sur la précédente
ajouter un HashSuivant, calculé sur la ligne en cours et la suivante
=>Cela permet de vérifier qu'il n'y a pas de ligne manquante ni de modification de ses lignes

2/ activer le cryptage du fichier Facture (et LigneFacture) dans l'analyse, et le protéger par mot de passe
=> Cela permet d'assurer la protection des données

3/ ajouter dans le logiciel une fonction de VérificationData() destinée à l'administration fiscale, permettant de lire le fichier Facture (et LigneFacture) et afficher des voyants verts si les Hash sont corrects en face de chaque ligne, et rouge sinon.

>Ca suffit, non?