Gå til innhold

Kryptering og dekryptering av tekst


Anbefalte innlegg

Videoannonse
Annonse

En veldig enkel metode (som blir brukt i Total Annihilation sitt HPI format) er exclusive or med posisjonen i teksten

Egentlig burde du gjøre det om til Unicode og ta to byte av gangen, men dette er bare et eksempel, så jeg gjør det så enkelt som mulig.

Private Function CryptText(text As String) As String
 Dim out As String
 Dim c As Integer
 For X = 1 To Len(text)
   out = out & Chr(Asc(Mid(text, x, 1)) Xor X)
 Next
 CryptText = out
End Function

Du kjører samme funksjonen for å dekryptere igjen.

Selvsagt er dette er utrolig lett å finne ut av, men ingen kan lese det uten å dekryptere det først, og det er mange måter å gjøre det verre på.

Lenke til kommentar

Funksjonen, eller funksjoner generelt, brukes slik:

Private Sub Form_Load()

MsgBox CryptText("Hallo")

End Sub

Private Function CryptText(text As String) As String

Dim out As String
Dim x As Integer
For x = 1 To Len(text)
   
   out = out & Chr(Asc(Mid(text, x, 1)) Xor x)
   
Next

CryptText = out

End Function

Endret av Jonas
Lenke til kommentar

Xor er veldig enkel, Den gir tilbake True hvis:

En av verdiene er true, men ikke hvis begge er true.

1 Xor 1 = 0

1 Xor 0 = 1

0 Xor 1 = 1

0 Xor 0 = 0

i motsetning til Or som også gir True hvis begge er True.

 

Når det blir lagt sånn som det er der, blir det kalt Binary Exclusive Or, hvis du har det i en If setning (eller en av variablene er en Boolean) er det en Logical Exclusive Or.

Lenke til kommentar

Eller du kan også si at den inverserer bittene.

 

11001010 xor 11111111 gir 00110101

Forutsett at verdi2 er 11111111 ja.

 

Det finnes tusen krypteringsmetoder, men de aller fleste er temmelig innviklete.

 

Til passord og slikt er MD5 ganske vanlig, fodi den kun gir fra seg en hash kode, og passordet kan ikke hentes tilbake fra denne verdien.

 

Kikk i .NET framework i Security.Cryptography, der er det mer en nok å velge imellom.

Endret av GeirGrusom
Lenke til kommentar

Eller du kan også si at den inverserer bittene.

 

11001010 xor 11111111 gir 00110101

Forutsett at verdi2 er 11111111 ja.

 

Det finnes tusen krypteringsmetoder, men de aller fleste er temmelig innviklete.

 

Til passord og slikt er MD5 ganske vanlig, fodi den kun gir fra seg en hash kode, og passordet kan ikke hentes tilbake fra denne verdien.

 

Kikk i .NET framework i Security.Cryptography, der er det mer en nok å velge imellom.

Det var ikke i noe krypteringsøyemed jeg skrev dette. Det var kun ment for å illustrere hva xor gjør.

Lenke til kommentar

Går det greit å forklare ved bruk av eksempler?

 

Public Function Crypt(sText As String, sPassword As String, Optional Encode As Boolean) As String

   Dim Tell As Long, CharIndex As Long, Value As Long
   
   ' Lag en kopi av strengen
   Crypt = sText
   
   ' Gå gjennom alle tegnene i strengen som skal krypteres/dekrypteres
   For Tell = 1 To Len(sText)
       ' Denne er indeksen til hvilket tegn i passordet vi skal benytte
       CharIndex = CharIndex + 1
       
       ' Dersom indeksen overstiger størrelsen på passordet, begynn på nytt
       If CharIndex > Len(sPassword) Then
           CharIndex = 1
       End If
       
       ' Det vi nokså enkelt gjør med følgende kode, er å legge til eller trekke fra VERDIEN av
       ' det gjeldende tegnet i teksten med VERDIEN av et bestemt tegn i passordet. Poenget her er
       ' at passordet må (i de fleste tilfeller) være identisk for at utdata skal være leselig ved
       ' dekrypteringen.
       
       ' Boundaries-funksjonen sørger for at vi ikke overstiger (i ASCII) den gyldige spennvidden (0-255)
       ' Altså, er resultatet av utregningen 458 (å + å), subtraheres det med 255, som gir tallet 203.
       ' Når vi senere kjører 203 (tegnet Ë), subtraheres tallet med å (229), hvilket gir -26. Dette
       ' ligger utenfor spennvidden og blir følgelig rettet opp ved å addere tallet med 255. Dette gir
       ' -26 + 255 = 229 (å), det tegnet vi opprinnelig startet med.
       
       If Encode Then
           ' Krypter teksten
           Value = Boundaries(Asc(Mid(sText, Tell, 1)) + Asc(Mid(sPassword, CharIndex, 1)))
       Else
           ' Dekrypter
           Value = Boundaries(Asc(Mid(sText, Tell, 1)) - Asc(Mid(sPassword, CharIndex, 1)))
       End If
       
       ' Skriv resultatet til utdata
       Mid(Crypt, Tell, 1) = Chr(Value)
   Next
   
End Function

' Denne funksjonen adderer eller subtraherer inndata dersom det er nødvendig
Public Function Boundaries(ByVal lngValue As Long) As Long

   If lngValue < 0 Then lngValue = lngValue + 255
   If lngValue > 255 Then lngValue = lngValue - 255
   
   Boundaries = lngValue

End Function

 

Funksjonen Crypt benyttes på følgende måte:

 

Kryptering: Crypt [tekst], [nøkkel], False

Dekryptering: Crypt [tekst], [nøkkel], True

 

Denne algoritmen er naturligvis ikke særlig sikker, men til enkel bruk, f.eks for å hindre at uvedkommende umiddelbart kan se informasjon, kan du vurdere å bruke den.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...