Page 3 sur 4
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 10:56
par falsam
Bonjour Micoute. Juste un truc qui m'énerve un peu. J'ai l'impression que tu ne lis que la dernière réponse.

J'ai proposé une solution ainsi qu'une question ici :
http://www.purebasic.fr/french/viewtopi ... 81#p153481

SPH t'a proposé aussi une solution réversible qui fonctionne ici
http://www.purebasic.fr/french/viewtopi ... 73#p153473

Ar-s te confirme que ça fonctionne ici
http://www.purebasic.fr/french/viewtopi ... 82#p153482
La moindre des choses est de lire l'ensemble des messages et de donner une réponse.
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 10:57
par Backup
toi aussi , tu pourrai lire les réponses !!
ta solution , ne correspond pas a ce qu'il veux !
il veux une séparation des chiffres entre les zero d'une Sequence de chiffre , et pas seulement d'un Chiffre !!! , ET un Encodage/decodage Reversible
comme le Xor en fait ! ....
et voici la solution :
Code : Tout sélectionner
Declare.i X(nombre.i,code)
Declare decoupe(nombre.s)
calldebugger
nombre.s="13213210346513210654849306506846860686468600"
debug "chaines de reference "+nombre.s
global newlist sequence.s()
decoupe(nombre.s) ; on decoupe nombre
; ****** affiche le contenu de la liste ******
ResetList(sequence.i())
While NextElement(sequence.i())
Debug "la valeur ="+str(val(sequence.i()) ); Affiche tous les éléments de la liste
encode.i=X(val(sequence.i()),8)
decode.i=X(encode.i,8)
debug "encodé donne ="+ str(encode)
Debug "Decodé donne ="+str(decode.i)
Debug " *************************"
Wend
Procedure.i X(nombre.i,code)
result.i=nombre.i ! code
ProcedureReturn result.i
Endprocedure
procedure decoupe(nombre.s)
; Dobro
ClearList(sequence.s())
id= CountString(nombre.s,"0")
For i=1 to id
sortie.s=stringfield(nombre.s,i,"0")
if Sortie.s<>""
AddElement(sequence.s())
sequence.s()=sortie.s
Endif
Next i
Endprocedure
; EPB
ton code n'apporte pas ce résultat ! ....loin de la
a ta decharge , et a la mienne , faut reconnaitre que Micoute , n'est pas tres précis dans ses demandes

Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 11:00
par falsam
ton code n'apporte pas ce résultat ! ....
Le code que j'ai proposé et le code reversible de SPH répondait à la demande initiale de Micoute. Le résultat du code est conforme à ce qu'il demandait
Micoute a écrit :C'est pourtant simple,
1 = 1, 2 = 2, 3 = 3, 4 = 4, 5 = 5, 6 = 6, 7 = 7, 8 = 8, 9 = 9, 10 = 11, 11 = 12, 12 = 13, 13 = 14, 14 = 15, 15 = 16, 16 = 17, 17 = 18, 18 = 19, 19 = 21, 20 = 22, 21 = 23, 22 = 24, 23 = 25, 24 = 26, 25 = 27, 26 = 28, 27 = 29, 28 = 31, etc...
Juste pour la vérification
Code : Tout sélectionner
Procedure NombreSansZero(Value)
Protected X,N
For X=1 To Value
If Right(Str(X+N),1)="0"
N+1
EndIf
Next
ProcedureReturn(Value+N)
EndProcedure
For i= 1 To 28
Debug Str(i)+" = " +Str(NombreSansZero(i))
Next
Résultat
Code : Tout sélectionner
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
10 = 11
11 = 12
12 = 13
13 = 14
14 = 15
15 = 16
16 = 17
17 = 18
18 = 19
19 = 21
20 = 22
21 = 23
22 = 24
23 = 25
24 = 26
25 = 27
26 = 28
27 = 29
28 = 31
Résultat conforme à la demande

Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 11:01
par Backup
oui mais :
Micoute a écrit :SPH a écrit :Bon, et a quoi sert ta routine ?

Si je veux exclure le zéro, c'est parce qu'il va me servir de séparateur, ainsi 13213210346513210 peut mieux se découper si je sais où je dois le faire, mais si je mets un autre caractère, mon code va être cracké tout de suite, car 1321321|34651321| ça se remarque toute de suite.
ton code n'est pas reversible !!
c'est a dire que 28 ne redonnera pas 26 !!

ça faisait partie de sa demande aussi
a ta decharge , et a la mienne , faut reconnaitre que Micoute , n'est pas tres précis dans ses demandes

Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 11:12
par Micoute
Bonjour et merci à tous,
falsam, tu es dans le vrai dans ce que tu me dis, car je perd la mémoire en courant, mais j'essaie tous les codes qui me sont proposés.
Essaye ton code jusqu'à 100 et tu comprendras pourquoi je l'ai réjeté !
Bien sûr, je remercie l'ensemble des membres qui m'aident dans mon entreprise à trouver un code réversible (codage/décodage) qui n'existe pas encore, c'est vrai que je n'ai répondu qu'à certains et j'espère que vous me pardonnerez de cet oubli.
Pour répondre à Dobro, j'entend par codage et décodage le fait de transformer un nombre décimal qu'on utilise tous les jours puisqu'on a un système décimal, je dis ça pour éviter la confusion, donc ce nombre décimal, je veux le coder en base 9, mais en excluant le zéro, car je ne souhaite pas que mes données soient décodées trop facilement.
Quand je décode le fichier où chaque groupe de nombres est séparé par 0, je souhaite restituer le code d'origine.
Veuillez m'excuser pour la complexité, mais je souhaite vraiment faire un codage incrackable !!!
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 11:22
par Backup
Micoute a écrit :
Veuillez m'excuser pour la complexité, mais je souhaite vraiment faire un codage incrackable !!!
ce code l'est :
Code : Tout sélectionner
Declare.i X(nombre.i,code)
Declare decoupe(nombre.s)
calldebugger
nombre.s="13213210346513210654849306506846860686468600"
debug "chaines de reference "+nombre.s
global newlist sequence.s()
decoupe(nombre.s) ; on decoupe nombre
; ****** affiche le contenu de la liste ******
ResetList(sequence.i())
While NextElement(sequence.i())
Debug "la valeur ="+str(val(sequence.i()) ); Affiche tous les éléments de la liste
encode.i=X(val(sequence.i()),8)
decode.i=X(encode.i,8)
debug "encodé donne ="+ str(encode)
Debug "Decodé donne ="+str(decode.i)
Debug " *************************"
Wend
Procedure.i X(nombre.i,code)
result.i=nombre.i ! code
ProcedureReturn result.i
Endprocedure
procedure decoupe(nombre.s)
; Dobro
ClearList(sequence.s())
id= CountString(nombre.s,"0")
For i=1 to id
sortie.s=stringfield(nombre.s,i,"0")
if Sortie.s<>""
AddElement(sequence.s())
sequence.s()=sortie.s
Endif
Next i
Endprocedure
; EPB
ici au lieu d'utiliser la base 9 pour encoder , j'utilise Xor ... avec le chiffre 8
si tu veux que ton code soit "incrackable"
il te suffit d'encoder chaque segments avec un nombre aussi gros que le nombre qu'il encode
par exemple en ce moment j'encode "1321321" avec le chiffre 8 ... apres etude, c'est retrouvable ..
mais au lieu de 8 , si j'avais utilisé "1234567" là c'est quasi impossible a retrouver ! (encore que la clef est facile )
avec XOR si la clef est aussi longue que le truc a encoder , alors c'est impossible a retrouver !! surtout si le truc est des nombres
et qu'on ne sait pas a quoi correspond ce nombre ..
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 11:23
par Ar-S
J'avoue que j'ai cherché ce matin encore une bonne heure à résoudre ce soucis, entre temps dobro a posté du code. J'ai tout de même découvert cette base nonaire, donc c'est toujours ça

Par contre Micoute, essaye d'être vraiment explicite lors de ta prochaine demande, c'est frustrant d'avoir à "comprendre" exactement ton problème si tu ne l'es pas. C'est toujours pas clair (pour moi en tout cas), connaître
le but de ton programme serait un gros plus. Si c'est du chiffrement de texte, d'images etc... que tu cherches à faire il existe plein de méthodes et même de codes que tu trouveras ici. Bonne continuation.
Petit conseil perso pour le chiffrement.
je te conseils de préférer mettre plusieurs codages "simple" plutôt qu'un seul complexe.
par exemple, ça ne te coute rien d'utiliser un reversestring() d'une chaine sur deux, de remplacer ton séparateur par des lettres au hasard etc.. en plus de ton code de base.
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 11:48
par SPH
Ar-S a écrit :Par contre Micoute, essaye d'être vraiment explicite lors de ta prochaine demande, c'est frustrant d'avoir à "comprendre" exactement ton problème si tu ne l'es pas. C'est toujours pas clair (pour moi en tout cas)
+1
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 12:08
par Micoute
Merci encore à tous,
tout d'abord, je tiens à préciser qu'il ne faut jamais qu'un nombre comporte un 0, car le 0 a une fonction spécifique, celui de séparateur.
Dobro, ta technique est très bonne, car ce n'est pas la base qui compte, n'importe laquelle peut faire l'affaire, mais seulement l'absence du 0 dans les nombre est très important.
Je tiens aussi à préciser que je veux inventer une méthode de codage inconnue à ce jour, mais vous pourrez vous dire que cette méthode est un peu la vôtre, car vous y aurez tous participé.
Ar-s, je suis d'accord avec toi, mais je souhaite faire du cousu sur mesure et le cahier des charges est très strict : "0" non toléré !
Si je demande votre aide collégiale, c'est parce que je me suis penché sur le problème depuis un moment (j'en rêve même la nuit) et je ne m'en sors pas, mais comment faisaient les Romains qui ne connaissaient pas le 0 ?
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 12:22
par SPH
Je doute fort que ta methode soit secure
Je doute meme que tu puisses la mettre en oeuvre concretement

Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 12:44
par falsam
Micoute a écrit :tout d'abord, je tiens à préciser qu'il ne faut jamais qu'un nombre comporte un 0, car le 0 a une fonction spécifique, celui de séparateur.
Si j'avais su ça plus tot ......
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 13:00
par Backup
Micoute a écrit :Je tiens aussi à préciser que je veux inventer une méthode de codage inconnue à ce jour
hum !
mais seulement l'absence du 0 dans les nombre est très important
alors sache que ce manque de zero (je parle dans le résulat Encodé) va forcement sauter au yeux ...
je ne sait pas ce que tu veux encoder ... mais un bon XOr , ou bien l'utilisation de la lib Cipher et de l'encodage type AES
a fait ses preuves ....
pour ce qui concerne les encodage Exotique , j'ai pour ma part mis en oeuvre un codage Text basé sur le "Hasard" (random) et la position
de la lettre encodé ....
Ar-souille a lui fait un encodage des Pixels d'une image basé sur le RVB
etc... les forums (Fr/Gb/De) ne manquent pas d'exemples d'encodage/decodage Maison ......
malgré tout ça , ça ne résisterai pas tres longtemps a des pros du decodage ...

(mise a part AES peut etre)
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 13:26
par Micoute
Merci tout de même Dobro,
j'avais déjà envisagé qu'on essaierait de cracker mon code, c'est pourquoi je souhaitais le coder avec mon propre code avant de le sur coder avec une méthode connue, c'est un doux rêve que j'avais fait: faire le codage absolu.
Si ça ne faisait pas une base de 8 Go pour enregistrer les paires de nombres, j'aurais opté pour cette solution, mais compter de 1 à 16777215, ça fait chauffer les processeurs et ça prend du temps qui est vite gagné quand on décode, car quand on tape : Debug Base9VersDecimal(1152293), la réponse est 624999 et si on tape : Debug Base10VersBase9(624999), la réponse est 1152293 et ça ne prend que 2 secondes en tout !
Pour l'instant, j'ai essayé ça:
Code : Tout sélectionner
Enumeration
#Fenetre
#Base_de_donnees
#Liste
#Bouton_Reset
#Bouton_Ajouter
#Bouton_MAJ
#Bouton_Supprimer
#Texte_Index
#Texte_Base10
#Texte_Base9
#Chaine_Index
#Chaine_Base10
#Chaine_Base9
EndEnumeration
UseSQLiteDatabase()
Global A.i
Global.s Fichier_de_donnees = GetCurrentDirectory() + "Base9.SQLite"
Global.s ReqSql, Table = "Valeurs"
Procedure Base9VersDecimal(NombreBase9.i)
If OpenDatabase(#Base_de_donnees,Fichier_de_donnees, "", "", #PB_Database_SQLite)
ReqSql = "SELECT * FROM " + Table
EndIf
If DatabaseQuery(#Base_de_donnees, ReqSql) <> NombreBase9
While NextDatabaseRow(#Base_de_donnees)
Base10 = GetDatabaseLong(#Base_de_donnees, 0)
Base9 = GetDatabaseLong(#Base_de_donnees, 1)
If Base9 = NombreBase9
resultat = Base10
EndIf
Wend
FinishDatabaseQuery(#Base_de_donnees)
EndIf
CloseDatabase(#Base_de_donnees)
ProcedureReturn resultat
EndProcedure
Procedure Base10VersBase9(NombreBase10.i)
If OpenDatabase(#Base_de_donnees,Fichier_de_donnees, "", "", #PB_Database_SQLite)
ReqSql = "SELECT * FROM " + Table
;Debug ReqSql
EndIf
If DatabaseQuery(#Base_de_donnees, ReqSql) <> NombreBase10
While NextDatabaseRow(#Base_de_donnees)
Base10 = GetDatabaseLong(#Base_de_donnees, 0)
Base9 = GetDatabaseLong(#Base_de_donnees, 1)
If Base10 = NombreBase10
resultat = Base9
EndIf
Wend
FinishDatabaseQuery(#Base_de_donnees)
EndIf
CloseDatabase(#Base_de_donnees)
ProcedureReturn resultat
EndProcedure
UseSQLiteDatabase()
Procedure CreerBase()
If FileSize(Fichier_de_donnees) < 0
If CreateFile(#Base_de_donnees, Fichier_de_donnees)
CloseFile(#Base_de_donnees)
If OpenDatabase(#Base_de_donnees,Fichier_de_donnees, "", "", #PB_Database_SQLite)
MessageRequester("", "Base de données "+ Fichier_de_donnees + " créée")
; Créer une table
ReqSql = "CREATE TABLE " + Table + " (Base10 TEXT, Base9 TEXT);"
DatabaseUpdate(#Base_de_donnees, ReqSql)
;Debug ReqSql
EndIf
EndIf
EndIf
MessageRequester("INFO", "Base de données terminée" + #CRLF$ + "Veuillez presser une touche")
EndProcedure
Procedure.s CoderBase10Vers9(Reste, Depart = 0)
A = Depart
For I = 1 To Reste
A + 1
While FindString(Str(A), "0", 1) > 0
A + 1
Wend
Next
ProcedureReturn Str(A)
EndProcedure
Procedure Mise_a_jour()
If OpenDatabase(#Base_de_donnees,Fichier_de_donnees, "", "", #PB_Database_SQLite)
; Ajouter des valeurs de 1 à 16777215
For i = 635000 To 635999 ;par petits paquets pour ne pas faire trop chauffer les processeurs
ReqSql = "(Base10, Base9) VALUES ('" + i + "','" + CoderBase10Vers9(i) + "');"
DatabaseUpdate(#Base_de_donnees, "INSERT INTO " + Table + ReqSql)
Next
CloseDatabase(#Base_de_donnees)
EndIf
EndProcedure
;CreerBase()
TempsDepart = ElapsedMilliseconds() ; Récupère la valeur actuelle
;Mise_a_jour() ;commenter pour éviter de réécrire les mêmes données
TempsEcoule = ElapsedMilliseconds()-TempsDepart
Debug "Temps écoulé : "+Str(TempsEcoule/1000)+" secondes"
Debug Base9VersDecimal(1152293)
Debug Base10VersBase9(624999)
Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 13:33
par Backup
n'oublie pas que ton code de "Decodage" va etre integré a ton prg ...
il est assez facile avec un Debugger genre OllyDbg de tracer ton code
et d'isoler la routine de Decodage ...
on peux meme l'extraire et faire un "KeyGen" avec

Re: Traduire une fonction VB en PB
Publié : jeu. 30/mai/2013 13:41
par Micoute
Dobro a écrit :n'oublie pas que ton code de "Decodage" va etre integré a ton prg ...
il est assez facile avec un Debugger genre OllyDbg de tracer ton code
et d'isoler la routine de Decodage ...
on peux même l'extraire et faire un "KeyGen" avec

D'accord, mais seules les personnes autorisées aurons le code de codage et de décodage, le fichier codé sera livré "tel quel" et c'est pour ça qu'il doit être très protégé