Vernam Chiffre - Verschlüsselung [B+/B3D]

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ozzi789

Betreff: Vernam Chiffre - Verschlüsselung [B+/B3D]

BeitragMo, Jan 30, 2012 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Vernam Chiffre verschlüsselt einen Text mittels einem festgelegten Passwort (hier auch Key genannt).
Bei einem genügend langen, zufälligen Key (nicht wie in der Demo 'secret1') ist die Verschlüsselung ziemlich solide!
Jedoch kann bei längeren Text, mittels Häufigkeitsanalysen der Buchstaben die Verschlüsselung geknackt werden. ( http://de.wikipedia.org/wiki/B...A4ufigkeit )


Hier noch Lektüre zu Vernam Chiffre:
http://de.wikipedia.org/wiki/Vernam-Chiffre
http://entwickler.com/itr/news...id,82.html


(Meine Funktion wiederholt den Key falls er zu kurz ist, normalerweise muss immer ein Key grösser als der zu verschlüsselnde Text gewählt werden)


BlitzBasic: [AUSKLAPPEN]

;ozzi789 - 30.01.2012
original_string$="Vernam ist toll"
Print "Original String: "+original_string$

encrypted_string$= vernam_enc(original_string$,"secret1")
Print "Encrypted String: "+encrypted_string$

decrypted_string$=vernam_dec(encrypted_string$,"secret1")
If original_string$=decrypted_string$
Print "Decrypted String: "+decrypted_string$
Else
Print "This should not happen :'("
EndIf


Function vernam_enc$(strng$,key$)
len_strng=Len(strng$)
len_key=Len(key$)

key_index=1
For x=1 To len_strng
current_strng$=Mid(strng$,x,1)
current_key$=Mid(key$,key_index,1)
new_strng$=new_strng$+Chr(Asc(current_strng$)+Asc(current_key$))
key_index=(x Mod len_key)+1
Next
Return new_strng$
End Function

Function vernam_dec$(strng$,key$)
len_strng=Len(strng$)
len_key=Len(key$)

key_index=1
For x=1 To len_strng
current_strng$=Mid(strng$,x,1)
current_key$=Mid(key$,key_index,1)
new_strng$=new_strng$+Chr(Asc(current_strng$)-Asc(current_key$))
key_index=(x Mod len_key)+1
Next
Return new_strng$
End Function
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Pummelie

BeitragMo, Jan 30, 2012 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Verschlüsselung, geil Very Happy
Genau das was ich gerade brauche, danke!
It's done when it's done.

Xeres

Moderator

BeitragMo, Jan 30, 2012 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Geschwindigkeitstest!

BlitzBasic: [AUSKLAPPEN]
Print("Initialize...")
Const Size%=32000
Local txt$=GenerateLongText(Size)
Local key$=GenerateLongText(Size/8)
Local time#
Delay(3000)

Print("encrypt...")
time=MilliSecs()
txt=vernam_enc(txt, key)
Print("Time: "+(MilliSecs()-time)+" ms for "+Size+" Symbols")
Print("Time: "+((MilliSecs()-time)/Float(Size))+" ms per Symbol")

Print("decrypt...")
time=MilliSecs()
txt=vernam_dec(txt, key)
Print("Time: "+(MilliSecs()-time)+" ms for "+Size+" Symbols")
Print("Time: "+((MilliSecs()-time)/Float(Size))+" ms per Symbol")

WaitKey()
End


Function GenerateLongText$(length%)
Local out$, i%
For i=1 To length
out = out + Chr(64+Rand(0,25))
Next
Return out
End Function

Function vernam_enc$(strng$,key$)
len_strng=Len(strng$)
len_key=Len(key$)

key_index=1
For x=1 To len_strng
current_strng$=Mid(strng$,x,1)
current_key$=Mid(key$,key_index,1)
new_strng$=new_strng$+Chr(Asc(current_strng$)+Asc(current_key$))
key_index=(x Mod len_key)+1
Next
Return new_strng$
End Function

Function vernam_dec$(strng$,key$)
len_strng=Len(strng$)
len_key=Len(key$)

key_index=1
For x=1 To len_strng
current_strng$=Mid(strng$,x,1)
current_key$=Mid(key$,key_index,1)
new_strng$=new_strng$+Chr(Asc(current_strng$)-Asc(current_key$))
key_index=(x Mod len_key)+1
Next
Return new_strng$
End Function

Ver- und Entschlüsslung:
238 ms / 32000 Zeichen = 0.0075 ms / Zeichen
131 ms / 32000 Zeichen = 0.0042 ms / Zeichen
Schneller geht's, wenn Text und Password die selbe Länge haben - aber davon abgesehen geht das erstaunlich schnell. Ich hätte gedacht, Strings wären langsamer.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ozzi789

BeitragMo, Jan 30, 2012 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah thx für den Geschwindigkeitstest! Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group