Page 1 sur 1

String Encrytion-Decryption

Publié : lun. 24/mai/2010 8:42
par Guimauve
Bonjour à tous,

En fouillant dans le site Code Archive je suis tombé sur un code de NicTheQuick pour chiffrer une chaine de caractère. Voir ici : http://www.purearea.net/pb/CodeArchiv/E ... Chiffre.pb

Je mets à la disposition de tous le code modifié sous la forme de 4 procédures. Les deux premières manipulent des chaines de caractères, les deux dernières permettent d'écrire et de lire les chaines chiffrées sur un fichier binaire.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : String Encrytion/Decryption
; File Name : String Encrytion-Decryption.pb
; File Version : 1.0.0
; Programmation : OK
; Programmed by : NicTheQuick
; Modified by : Guimauve
; Date : 11-05-2003
; Last Update : 24-05-2010
; Coded for PureBasic : 4.50
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  
#ENCRYPTED_STRING_MAX_RND = 5
#ENCRYPTED_STRING_PRESET = 127 
  
Procedure.s StringEncryption(String.s)
  
  Max = Len(String)
  
  For Index = 1 To Max
    
    ASCII.l = Asc(Mid(String, Index, 1)) 
    
    If Index = 1 
      PrevASCII.l = #ENCRYPTED_STRING_PRESET
    Else 
      PrevASCII.l = Asc(Mid(String, Index - 1, 1)) 
    EndIf 
    
    Num_01.l = Random(#ENCRYPTED_STRING_MAX_RND - 1) + 1 
    Num_02.l = (255 + PrevASCII - ASCII) * Num_01 
    Num_01 = (Random(100) * (#ENCRYPTED_STRING_MAX_RND + 1)) + Num_01 
    Value.l = Num_02 + (Num_01 << 16)
    Encrypted.s = Encrypted + RSet(Str(Value), 10, "0") + " "
    
  Next 
  
  ProcedureReturn Encrypted
EndProcedure 
  
Procedure.s StringDecryption(String.s)
  
  StartASCII.l = #ENCRYPTED_STRING_PRESET
  
  Max = CountString(String, " ")
  
  For index = 1 To Max
    
    Value.l = Val(StringField(String, Index, " "))        
    Num_01.l = Value >> 16
    Num_02.l = Value & $FFFF 
    Num_01 = Mod(Num_01, #ENCRYPTED_STRING_MAX_RND + 1) 
    Num_02 = (Num_02 / Num_01) - 255 
    StartASCII - Num_02 
    
    Decrypted.s = Decrypted + Chr(StartASCII) 
    
  Next 
  
  ProcedureReturn Decrypted 
EndProcedure 
  
Procedure WriteEncryptedString(FileID.l, String.s)
  
  Max = Len(String)
  WriteLong(FileID, Max)
  
  For Index = 1 To Max
    
    ASCII.l = Asc(Mid(String, Index, 1)) 
    
    If Index = 1 
      PrevASCII.l = #ENCRYPTED_STRING_PRESET 
    Else 
      PrevASCII.l = Asc(Mid(String, Index - 1, 1)) 
    EndIf 
    
    Num_01.l = Random(#ENCRYPTED_STRING_PRESET - 1) + 1 
    Num_02.l = (255 + PrevASCII - ASCII) * Num_01 
    Num_01 = (Random(100) * (#ENCRYPTED_STRING_PRESET + 1)) + Num_01 
    Value.l = Num_02 + (Num_01 << 16)
    WriteLong(FileID, Value)
    
  Next 
  
EndProcedure 
  
Procedure.s ReadEncryptedString(FileID.l)
  
  StartASCII.l = #ENCRYPTED_STRING_PRESET
  Max = ReadLong(FileID)
  
  For Index = 1 To Max
    
    Value.l = ReadLong(FileID)     
    Num_01.l = Value >> 16
    Num_02.l = Value & $FFFF 
    Num_01 = Mod(Num_01, #ENCRYPTED_STRING_PRESET + 1) 
    Num_02 = (Num_02 / Num_01) - 255 
    StartASCII - Num_02 
    
    Decrypted.s = Decrypted + Chr(StartASCII) 
    
  Next 
  
  ProcedureReturn Decrypted 
EndProcedure 
  
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - TESTING CODE !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  
For Index = 1 To 5
  
  Text.s = "Feel The Pure Power !"
  Encrypted.s = StringEncryption(Text)
  Decrypted.s = StringDecryption(Encrypted)
  Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
  Debug "; Test No." + Str(Index)
  Debug ""
  Debug Text 
  Debug Encrypted
  Debug Decrypted
  Debug ""
  
Next 
  
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Test Write/Read on file"
Debug ""
  
If CreateFile(0, "Testing.dat")
  
  WriteEncryptedString(0, Text)
  
  CloseFile(0)
  
EndIf 
  
If ReadFile(1, "Testing.dat")
  
  Text2.s = ReadEncryptedString(1)
  CloseFile(1)
  
EndIf 
  
Debug Text2
  
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<

Re: String Encrytion-Decryption

Publié : lun. 24/mai/2010 9:19
par Backup
Merci ! :)

enfin c'est pas les algo d'encryption qui manque sur le Forum :)

perso j'en ai fait un qui fait appel au Random() !! ;)
et un autre a Xor... ;) (present sur le forum..)

Re: String Encrytion-Decryption

Publié : lun. 24/mai/2010 11:47
par SPH
Guimauve : trop facile a casser et résultat beaucoup trop volumineux pour un résultat trop fragile

Re: String Encrytion-Decryption

Publié : lun. 24/mai/2010 14:54
par Guimauve
SPH a écrit :trop facile a casser
Je suis au courant et c'est spécialement pour cet raison que je l'ai fait. Va voir ici : http://www.purebasic.fr/french/viewtopi ... 33#p102833

À 8192 bits, avec un code alpha-numérique à 16 caractère cela risque de prendre tellement de temps que notre soleil va avoir le temps de s'éteindre avant que d'avoir passé au travers.
SPH a écrit : et résultat beaucoup trop volumineux pour un résultat trop fragile
Avec un disque dur de 1 Tera Octet d'espace, ce n'est pas un problème.

Voilà

A+
Guimauve