PureBasic

Forums PureBasic
Nous sommes le Mer 23/Oct/2019 7:27

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Procédures OPENSSL
MessagePosté: Lun 20/Mai/2013 14:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 24/Sep/2012 20:57
Messages: 46
Localisation: Somme
Bonjours à tous :)
Voici quelques procédures pour implémenter quelques commandes OPENSSL :
Code:
Global path.s="C:\openssl\bin\";-Variable du chemin ou se trouve openssl

;-Procedure RSA:
Procedure rsa_openssl_rand(taille,randfile.s,dossier.s);-generation de fichier de données pseudo-aléatoires
RunProgram(path.s+"openssl.exe","rand -out "+randfile.s+" "+Str(taille),dossier.s,#PB_Program_Wait| #PB_Program_Hide)
EndProcedure

Procedure.s rsa_openssl_genrsa(taille,dossier.s);-Création de clef publique/privée RSA (Ne pas confondre avec un certificat CRT et sa clef !!)
rsa_openssl_rand(taille,"random.bin",dossier.s);-1 On génère un fichier de données pseudo-aléatoires
RunProgram(path.s+"openssl.exe","genrsa -rand random.bin -out mykey.pem "+Str(taille),dossier.s,#PB_Program_Wait| #PB_Program_Hide);-2 on gènere la clef rsa
RunProgram(path.s+"openssl.exe","rsa -in mykey.pem -out mycert.pem -outform PEM -pubout",dossier.s,#PB_Program_Wait| #PB_Program_Hide);-3 on extrait la clef publique
DeleteFile(dossier.s+"random.bin");-4 on efface le fichier de données pseudo-aléatoires
EndProcedure

Procedure.s rsa_openssl_rsautl_encrypt(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","rsautl -encrypt -in entrer.dat -inkey mycert.pem -pubin -out coder.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-On chiffre avec la clef publique
RunProgram(path.s+"openssl.exe","base64 -in coder.dat -out base64.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en base64 (sa évite des BUG)
OpenFile(1,dossier.s+"base64.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"coder.dat")
DeleteFile(dossier.s+"base64.dat")
ProcedureReturn sortie.s
EndProcedure

Procedure.s rsa_openssl_rsautl_decrypt(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","base64 -d -in entrer.dat -out coder.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en ascii
RunProgram(path.s+"openssl.exe","rsautl -decrypt -in coder.dat -inkey mykey.pem -out decoder.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on dechiffre avec la clef priver
OpenFile(1,dossier.s+"decoder.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"decoder.dat")
DeleteFile(dossier.s+"coder.dat")
ProcedureReturn sortie.s
EndProcedure

Procedure.s rsa_openssl_rsautl_sign(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","rsautl -sign -in entrer.dat -inkey mykey.pem -out signer.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on signe avec la clef priver
RunProgram(path.s+"openssl.exe","base64 -in signer.dat -out base64.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en base64
OpenFile(1,dossier.s+"base64.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"signer.dat")
DeleteFile(dossier.s+"base64.dat")
ProcedureReturn sortie.s
EndProcedure

Procedure.s rsa_openssl_rsautl_verify(entrer.s,dossier.s)
OpenFile(1,dossier.s+"entrer.dat")
WriteData(1,@entrer.s,Len(entrer.s))
CloseFile(1)
RunProgram(path.s+"openssl.exe","base64 -d -in entrer.dat -out signer.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on convertie en ascii
RunProgram(path.s+"openssl.exe","rsautl -verify -in signer.dat -inkey mycert.pem -pubin -out verifier.dat",dossier.s,#PB_Program_Wait|#PB_Program_Hide);-on verifie
OpenFile(1,dossier.s+"verifier.dat")
sortie.s=Space(Lof(1))
ReadData(1,@sortie.s,Lof(1))
CloseFile(1)
DeleteFile(dossier.s+"entrer.dat")
DeleteFile(dossier.s+"verifier.dat")
DeleteFile(dossier.s+"signer.dat")
ProcedureReturn sortie.s
EndProcedure
;-Fin de Procedure RSA:

;Programme de test:
clair.s="Ceci est un test de codage/decoder/signature/verification openssl."
dossiercourant.s=PathRequester("Openssl test :","C:\")
rsa_openssl_genrsa(1024,dossiercourant.s)
coder.s=rsa_openssl_rsautl_encrypt(clair.s,dossiercourant.s)
decoder.s=rsa_openssl_rsautl_decrypt(coder.s,dossiercourant.s)
signer.s=rsa_openssl_rsautl_sign(decoder.s,dossiercourant.s)
verifier.s=rsa_openssl_rsautl_verify(signer.s,dossiercourant.s)
Debug verifier.s


Il n'y à pas toutes le commandes, car j'ai du mal à les implémenter (notamment SMIME, X509, CA à cause de l'édition de fichier openssl.cnf que je ne métrise pas).
N'ésiter pas à poster des codes sources de commandes que je n'est pas implémenter ! sa nous fera tous avancer ;)
Bon codage à tous!


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye