[VBA] Algoritme de cryptage

Algoritme de cryptage [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 23-06-2003 à 08:45:52    

Salut !
 
J'aimerais savoir si l'un de vous connait un algorithme de cryptage, ou connait une page avec un algo dessus!
 
Je voudrais pouvoir crypter une chaine de caracteres, et que la clef soit secrète (cad que la clef soit stockée en dur dans mon appli, et que je sois le seul à la connaitre)
 
Merci pour votre aide éventuelle.

Reply

Marsh Posté le 23-06-2003 à 08:45:52   

Reply

Marsh Posté le 23-06-2003 à 09:12:49    

j'ai pas d'exemple tout fait sous la main mais je te file un concept:
 
tu as une info et tu veux la crypter.  Une façon simple de faire est d'opérer un XOR sur chaque caractère de ton info.  Mieux, tu utilises une clé pour faire ton XOR, de manière à ne pas toujours appliquer la même info sur chaque élément, et obtenir un truc un peu plus biscornu à l'arrivée.  Tu me suis ou je développe un peu plus? :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 11:08:12    

Merci pour ta réponse !
 
Pour le XOR, qu'entends tu?
 
Par exemple, chaque caratcere de la chaine a un code ASCII (compris entre 0 et 255). Tu le mets en Bnaire => 8 bits. Et ensuite, bit à bit, tu le filtres avec ta clefs (donc une clef de 8 bits également?) => code généré !
 
Ensuite, en retour, tu fais exactement le meme XOR, et ca redonne la valeur initiale?
 
Par exemple, prenons 01010101 omme clef
et 10010111 à crypter :
10010111 XOR Clef => 11000010
et
11000010 XOR clef => 10010111
 
C'est ca?
 
Le probleme, c'est que ca reste relativement facile à décrypter, tu ne trouves pas?
 
Je ne pourrais pas trouver un algo plus puissant?
 
J'ai essayé de chercher des trucs genre KDES, ou compagnie, mais j'ai l'impression que ces algos ne sont pas en "open source" !

Reply

Marsh Posté le 23-06-2003 à 11:11:07    

pour un mot de passe, ya moyen de faire des trucs relativement complexes sans pénaliser les performances, mais si tu essaies de crypter une masse de données plus importante, tu vas avoir un sérieux problème de performances justement, je dis ça parce que je m'attaque au problème de temps en temps en VB :D
 
sinon pour un mot de passe, il existe des algos de hashage genre MD5, ça peut se trouver en VB :)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 11:16:29    

En fait, je chercher à crypter des chaines genre de 50 caracteres maximum, et je voudrais que le cryptage prenne quand meme moins de 10 secs (c'est réaliste de demander ca?), dinsons, sur un PIII 500!
 
Je voudrais trouver l'algorithme (facilement compréhensible??) (ou alors un morceau)
 

Reply

Marsh Posté le 23-06-2003 à 11:19:37    

oui, c'est tout à fait réalisable, et j'oublie de confirmer pour le XOR, c'est bien ça aussi.
 
Bon oublie le hashing, pour un password ça pourrait le faire, mais si tu comptes crypter quelques données que tu veux récupérer après, c'est pas une bonne idée :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 11:27:18    

Le Hashing, c'est quoi?
 
C'est genre dire : A = E, B = (, C = r, D = §, etc?
 
Quand tu me parlais du MD5, c'est possible de trouver cet algo quelque part? il est public? il marche avec un Clef Privée?

Reply

Marsh Posté le 23-06-2003 à 11:29:57    

Non, le hashing est un système de signature, pas grand chose à voir avec le cryptage car ça ne fonctionne que dans un sens, on sait pas reconstituer des données à l'aide d'une signature MD5.
 
Mais tu peux trouver l'algo sur le net sans problème, genre en faisant une recherche sur "VB6 MD5"


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 11:51:28    

ok, c'est en fait ce qu'il me semblait !
 
En fait, avec le hashing, deux aleurs différentes peuvent se retrouver avec la meme valeur apres hash, donc, impossibilité de reconstituer la valeur initiale !
 
Et donc, pour mon algo de cryptage? Quelles sont les solutions que je pourrais considérer?
 

Reply

Marsh Posté le 23-06-2003 à 11:53:44    

à mon avis un vrai algo de cryptage officiel va me sembler lourd et long (en plus je serais étonné que ça existe en VB), genre RSA ce genre de choses bien complexes quoi :o
 
Un chtit algo maison?  Tes utilisateurs, c'est des débutants ou power users? :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 11:53:44   

Reply

Marsh Posté le 23-06-2003 à 12:04:15    

[:blueflag]


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 23-06-2003 à 12:20:12    

Bah mes utilisateurs, c'est des débutants, mais on ne sait jamais !
 
Sinon, un algo "puissant", ca reste basé sur des opérations simples, alors pourquoi en VB ce ne serait pas possible?

Reply

Marsh Posté le 23-06-2003 à 13:06:14    

ben c'est surtout que VB est lent en beaucoup de choses.  Ses avantages ne sont que la création rapide d'interfaces et la facilité de prise en main.  Le cryptage c'est d'un autre niveau je dirais [:spamafote]
 
je peux toujours poster mon essai de classe de cryptage mais faut que je rajoute quelques commentaires avant :D
 
disclaimer: avant que quelqu'un ne crie au troll, je précise que j'ai 5 ans de VB derrière moi :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 13:16:05    

Je suis oK que VB est "lent", pour des opérations arithmétiques pures, etc...
 
Mais tout est relatif !
 
Si il met 1 seconde pour me crypter mon truc au lieu des 0.1s qu'aurait mis un prog en assembleur, ca ne me dérange pas trop ;)
 
C'est d'ailleurs pour ca que je suis demandeur d'un algo que je puisse transcrire en VB ! Meme si au final, il est plus lent !
 

Reply

Marsh Posté le 23-06-2003 à 13:54:06    

j'ai pas d'algo à te soumettre, par contre j'ai un bout de code qui en est au stade expérimental.  Aller je le poste [:banzai]
 
Voici un screenshot de mon exemple:
 
http://www.nightwing.easynet.be/faqs/vb6/cryptpwd.png
 
et j'ai zippé le source ici> http://www.nightwing.easynet.be/faqs/vb6/cryptpwd.zip
 
les commentaires sont en anglais.


Message édité par drasche le 23-06-2003 à 13:54:23

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 14:33:04    

Merci pour ton code !
 
Je suis en train de regarder ca !
 
Je voiis que tu fais un API Call !
 
Quand tu mets :
 
' Copy an array of bytes (binary format) into a unicode string
 
lorsque tu utilises un appel API, est ce que ca veut dire que par exemple une string va etre transférée dans un tableau de bytes (0-255), chacune des cases contenant le code ASCII du caractere en question?

Reply

Marsh Posté le 23-06-2003 à 14:35:42    

oui, c'est exactement ça.  Si tu peux pas utiliser d'API, tu initialises ton tableau avec une boucle mais c'est un poil plus lent [:boidleau]
 
faut quand même noter que ça marche qu'avec de l'ASCII (0-255), si t'essaies de l'unicode, ça marchera pas :/


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 14:46:24    

Je viens de regarder ton code, sympa !
 
En fait, j'avais jamais fait de VB en tant que tel (cad lancé à partir de Visual Studio, etc...) et ca m'a permis de voir un peu comment ca marche !
 
Sinon, j'ai regardé tes 3 algos de cryptage, et j'ai vu comment ca marchait :
1/ cryptage simple avec XOR "bit à bit"
2/ cryptage plus complexe en utilisant les bits de la clef auxuqels tu ajoutes à chaque fois 2 de plus que lors de l'étape différente (avec au passage un transofmation d'un long en byte, en ne gardant que l'octet de poids le plus faible)
3/Cryptage encore plus complexe, pareil qu'en 2, mais en prenant les caracteres de la clef dans un ordre plus "biscornu" de 2 en 2 en avant, puis de 2 en 2 en arrière, de manière exclusive !
 
Merci bien :)
 
Il y a un an environ, j'avais fait un algo un peu farfelu de cryptage, dans le genre tres tres tordu !
 
Je vais essayer de trouver sur le net d'autres algos, je uis sur qu'il en existe, on avait fait un cours dessus, genre KDES et compagnie !
 
C'est sympa tout ça ;)

Reply

Marsh Posté le 23-06-2003 à 14:51:23    

j'ai encore plus tordu en stock mais ça devient lent et en plus c'est pas encore tout à fait au point :whistle:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 14:57:58    

Est ce que les "grands" cryptages connus marchent sur ce genre de technique, ou c'est plus compliqué?

Reply

Marsh Posté le 23-06-2003 à 15:14:49    

le problème des techniques de cryptage est qu'elles font généralement appel à des opérations bits à bits, le XOR n'étant qu'un exemple.  On a donc des opérations de rotation de bits et autres joyeusetés du genre.  Et en VB, à part le XOR, il n'y a rien de tout cela, il faut émuler, c'est en partie pour ça aussi qu'implémenter du cryptage "fort" en VB est une hérésie.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 15:17:36    

D'accord !
 
Je comprends mieux !
 
Mais alors, ce ne seriat pas possible de faire celà VIA du code C++ et l'inclure dans un controle ActiveX importé dans le VB ou alors via une DLL toute simple??

Reply

Marsh Posté le 23-06-2003 à 15:20:25    

On peut, de la même manière qu'on appelle les API Win32.  Si c'est codé en COM c'est l'idéal mais un poil plus complexe à programmer au niveau interface.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 15:50:49    

C'est quand meme fou que seul le XOR soit accessible en VB pour les Bytes...
 
Un COM, c'est quoi? Une interface de méthodes?
Quelle est la différence avec un Object ActiveX?
De toute manière, je ne pense pas que dans le fonds, j'ai besoin d'un algo de cryptage puissant, mais c'est dommage, car j'auraiis aimé me faire la main la dessus :(

Reply

Marsh Posté le 23-06-2003 à 15:51:17    

ayé j'ai updaté mon algo (et donc le zip) parce qu'il y avait un bug avec les chaînes de + de 255 caractères [:boidleau]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 15:57:39    

Yoyo@ a écrit :

C'est quand meme fou que seul le XOR soit accessible en VB pour les Bytes...
 
Un COM, c'est quoi? Une interface de méthodes?
Quelle est la différence avec un Object ActiveX?
De toute manière, je ne pense pas que dans le fonds, j'ai besoin d'un algo de cryptage puissant, mais c'est dommage, car j'auraiis aimé me faire la main la dessus :(


 
Lol, on a posté quasi en meme temps !
 
J'ai reagrdé ton ZIP ! A quel endroit as tu fait une modif? De toute maniere, entre nous, ej ne pense pas que bocou de pwd fassent plus de 255 caracteres !

Reply

Marsh Posté le 23-06-2003 à 18:33:20    

j'ai fait une modif dans XorComplex, j'ai remplacé quelques boucles par une seule, plus pertinente et plus rapide.
 
ben en fait ActiveX est une technologie qui s'appuie sur COM, voire même les deux se confondent.
 
Ah en fait, le And et le Or sont possibles aussi mais ce sont les rotations qui sont plus difficiles à implémenter.  Ajouté à cela les types VB qui ne se prêtent pas du tout à cela (à part le Byte) parce qu'ils sont signés plutôt que non-signés (càd acceptent les nombres négatifs).  Ce problème de typage me semble le plus important.
 
Pour les algos de cryptage fort, rien ne t'empêche d'essayer mais franchement, mieux vaut un langage plus performant et plus adapté.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-06-2003 à 19:43:20    

drasche a écrit :

j'ai fait une modif dans XorComplex, j'ai remplacé quelques boucles par une seule, plus pertinente et plus rapide.
 
ben en fait ActiveX est une technologie qui s'appuie sur COM, voire même les deux se confondent.
 
Ah en fait, le And et le Or sont possibles aussi mais ce sont les rotations qui sont plus difficiles à implémenter.  Ajouté à cela les types VB qui ne se prêtent pas du tout à cela (à part le Byte) parce qu'ils sont signés plutôt que non-signés (càd acceptent les nombres négatifs).  Ce problème de typage me semble le plus important.
 
Pour les algos de cryptage fort, rien ne t'empêche d'essayer mais franchement, mieux vaut un langage plus performant et plus adapté.


 
Je suis d'accord avec toi, mais voila, mainteannt, mon appli tourne en VBA, donc, je n'ai pas le choix et je dois m'adapter aux outils que je possède :)
 
A part celà, pourquoi seul le type Byte est adapté en VB? Il n'est pas signé celui la?
 
Merci en tout cas pour ton aide :)

Reply

Marsh Posté le 23-06-2003 à 19:50:27    

oui, le byte est le seul qu'on peut travailler à la brute, les autres pas hélas :/


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 24-06-2003 à 09:25:40    

Il existe une API Microsoft pour encrypter des données
Si tu peux utiliser les API, ça doit répondre à tous tes besoins en la matière
Il s'agit de CryptoAPI pour laquelle je mets quelques liens:
http://www.codetoad.com/vb_crypto_api.asp
http://www.freevbcode.com/ShowCode.Asp?ID=804
http://members.ozemail.com.au/~geo [...] cryptoapi/
et surtout
http://msdn.microsoft.com/library/ [...] graphy.asp
 
J'espère que tu trouveras ton bonheur

Reply

Marsh Posté le 24-06-2003 à 10:04:45    

Tegu a écrit :

Il existe une API Microsoft pour encrypter des données
Si tu peux utiliser les API, ça doit répondre à tous tes besoins en la matière
Il s'agit de CryptoAPI pour laquelle je mets quelques liens:
http://www.codetoad.com/vb_crypto_api.asp
http://www.freevbcode.com/ShowCode.Asp?ID=804
http://members.ozemail.com.au/~geo [...] cryptoapi/
et surtout
http://msdn.microsoft.com/library/ [...] graphy.asp
 
J'espère que tu trouveras ton bonheur
 


 
Merci, c'est super ;)
 
Le probleme, c'est que ca touche un domaine sensible, donc, j'aurais aimé pouvoir au moins comprendre le code, au cas ou y ait un pépin un jour, que je maitrise un peu la chose !
 
Ici, je me retrouve avec des COM/Dll pretes à l'emploi, et pour le coup, ca me fait un peu peur !
 
Je vais continuer mes recherches ;)

Reply

Marsh Posté le 25-06-2003 à 00:29:32    

Bon, je compte utiliser un DLL compilée en C++, donc la barriere du langage et de son inefficacité n'en est plus une...
 
Donc, je réitere ma demande d'algorthme de cryptage :o)
 
Ah oui, j'ai aussi une question... Est ce que la chaine cryptée prend plus de caratceres que la chaine non cryptée? Est ce une nécessité?

Reply

Marsh Posté le 25-06-2003 à 07:40:01    

un bon cryptage compresse en plus de crypter, donc ça doit prendre moins de place.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 25-06-2003 à 09:20:04    

drasche a écrit :

un bon cryptage compresse en plus de crypter, donc ça doit prendre moins de place.


 
Ahahah, vivement que je trouve les algos ! Est ce que tu as un nom d'algorithme au moins à me donner dont tu sais que je peux en trouver la source sur le net?
 
Sinon, autre question...J'ai un peu mis mon nom dans les dll hier ! Pour l'instant, le seul moyen que j'ai trouvé est de faire une MFC Dll et apres de spécifier "Regular Dll" dans VC++6 !
 
Alors, quand j'appelle la dll à partir de mon programme VBA, je dois spécifier la chemin d'accès de la Dll ! ('ai essayé de registrer la dll mais ca ne marche pas sous VBA). Tu sais comment je pourrais faire pour l'inscrire sous windows, de maniere ) ne lus avoir son chemin d'accès à spécifier à chaque appel?

Reply

Marsh Posté le 25-06-2003 à 09:24:49    

malheureusement non [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 02-07-2003 à 15:49:36    

Private Function Crypter(cle As String, chaine As String) As String
Dim j, k As Integer
Dim tmp, code As String
 
code = ""
k = 1
 
For j = 1 To Len(chaine)
    tmp = Asc(Mid(chaine, j, 1)) Xor Asc(Mid(cle, k, 1))
    If tmp > 255 Then tmp = tmp - 255
    If tmp < 0 Then tmp = 255 + tmp
    k = k + 1
    If k > Len(cle) Then k = 1
    If tmp = 0 Then
        code = code + Mid(chaine, j, 1)
    Else
        code = code + Chr(tmp)
    End If
Next j
 
Crypter = code
 
 
 
End Function
 

Reply

Marsh Posté le 02-07-2003 à 16:22:14    

j et tmp sont déclarés variant dans ton code :o  (astuce VB inside)
 
et ce code-ci ne sert à rien:
 
   If tmp > 255 Then tmp = tmp - 255
   If tmp < 0 Then tmp = 255 + tmp
 
car vu qu'on travaille sur des bytes, la limite est implicitement de 0-255.  (un Byte Xor Byte donnera toujours un byte).
 
Et accessoirement, ça correspond au premier algo qui était dans mon zip :whistle:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 02-07-2003 à 16:34:48    

pas reussi a dl le zip correctement
 
je l'avais sous la main l'algo je me suis dis ca mange pas de pain de le mettre.
 
mais sinon il est difficilement "crackable" pour des utilisateurs de base ...

Reply

Marsh Posté le 02-07-2003 à 16:39:29    

chaine= "AAAAAAAA"
clé= "11111111"
chaine cryptée= "pppppppp"
 
j'ose espérer que les users de base ne pensent pas à ça :D
 
avec un niveau de complexité supplémentaire:
chaine cryptée = "prtvxz|~"
 
puis encore un poil plus compliqué:
chaine cryptée = "puv{z{xy"
 
allez y de bon coeur :)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 02-07-2003 à 16:54:50    

Je pense que le RC4 est implémentable facilement en VB, j'ai trouvé les algo sur plusieurs liens... En fait, les seules opérations binaires qui ne semblent pas dispos sous VB sont les décalages de bits, mais pour le reste, on a plus ou moins tout !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed