String Encrytion-Decryption
Publié : lun. 24/mai/2010 8:42
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
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<