[résolu] Traduire une fonction VB en PB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message 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.

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

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

:idea: 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message 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 ;)
Dernière modification par Backup le jeu. 30/mai/2013 11:18, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message 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 :)
Dernière modification par falsam le jeu. 30/mai/2013 11:04, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message 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 ;)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message 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 !!!
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message 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 ..
Dernière modification par Backup le jeu. 30/mai/2013 11:27, modifié 2 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Traduire une fonction VB en PB

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message 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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message 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 ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

Je doute fort que ta methode soit secure :idea:
Je doute meme que tu puisses la mettre en oeuvre concretement :!:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message 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 ......
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message 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)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message 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)
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message 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 :)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message 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é
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre