WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   VB6.0: ROT13 verschlüsselung für zahlen und sonderzeichen. (http://www.wcm.at/forum/showthread.php?t=107814)

Potassium 04.09.2003 21:12

VB6.0: ROT13 verschlüsselung für zahlen und sonderzeichen.
 
hi leute
ich hab heute mal den ROT 13 algorithmus probiert ;)
nun funzt es wunderbar mit buschstaben aber wenn ich zahlen eisetze dann nciht mehr. ist mir aj auch kalr warum weil es ja nur case "a" to "m" und case "n" to "z" heißt. aber von zahlen is halt nirgends die rede in meinem code.
also hab ich einfach eine zweiten geschrieben für zahlen:
'---------------------------------------------------------
Public Function potassium(ByRef Text As String) As String
Dim l As Long

potassium = Text
For l = 1 To Len(Text)
Select Case UCase$(Mid$(Text, l, 1))
Case "0" To "9"
Mid$(potassium, l) = Chr$(Asc(Mid$(Text, l, 1)) * 5)

End Select
Next l
End Function

'------------------------------------------------------------
und im formobjekt steht nun:
'------------------------------------------------------------
If txt.Text = "" Then
MsgBox "bitte geben schreiben sie den Text, den Sie verschlüssen wollen in die Textbox"
GoTo 2
ElseIf IsNumeric(txt.Text) Then
GoTo 3
Else: GoTo 1
End If
1
txt.Text = Rot13(txt.Text)
DateiNr = FreeFile
Open "crypt.txt" For Append As DateiNr
Print #DateiNr, txt.Text
Close
GoTo 2
3
txt.Text = potassium(txt.Text)
DateiNr = FreeFile
Open "crypt.txt" For Append As DateiNr
Print #DateiNr, txt.Text
Close

2

txtausgabe.Text = txt.Text

If txt.Text <> "" Then
Label1.Caption = "Ihre Eingabe lautet verschlüsselt:"
End If
txt.Text = ""
End Sub
'---------------------------------------------------------------

das funktioniert ganz gut aber nur bis zur zahl 13 :confused: dann kommt: ungültiger prozedur aufruf und folgende zeile wir markiert:

Mid$(potassium, l) = Chr$(Asc(Mid$(Text, l, 1)) * 5)

'--------------------------------------------------------------------

Nun mein Frage was is da falsch? Und wie kann ich das lösen? Und geht das für sonderzeichen auch?

Seidl 05.09.2003 08:36

Du verletzt den Wertebereich der Funktion Chr(). Grössere Werte als 255 hat sie gar nicht gern ;)
Die Sache sollte sich über Modulo lösen lassen. (5 mod 3 = 2)
Sonderzeichen werden wohl in jedem Fall Probleme machen. Am besten nur druckbare Zeichen verwenden.

Irmi 05.09.2003 08:43

Hallo,

Ein paar Gegenfragen :)

1) Warum erweiterst Du Dein Alphabet nicht einfach um die Ziffern 0 bis 9? Dann musst Du nicht extra unterscheiden zwischen Ziffer und Buchstabe.
2) Warum gehst Du bis 13? Das sind ja bereits 2 Ziffern, nämlich 1 und 3.
3) Allgemein: Warum verwendest Du nicht einen etwas sicheren Algorhythmus, wo sowieso alle Zeichen verschlüsselt werden, egal ob Sonderzeichen, Ziffern, o.ä.? ROT rotiert die Zeichen eines Alphabetes nur. Dies zu entschlüsseln ist ein Kinderspiel. Verwende RSA oder DES - sind beides sehr einfache Algorhythmen aber effektiv, im WWW findest Du jede Menge Anleitungen darüber (Google mal danach)

Bei Deinem ungültigen Prozeduraufruf wirst Du durch die Multiplikation mit 5 höchstwahrscheinlich einen Overflow erzeugen. (Als würdest Du ein chr mit 1000 machen)

Viel Spaß weiterhin beim Kryptographieren :)

Potassium 05.09.2003 13:02

@ irmi:
ich hab da noch einige fragen:
1.)wie mach ich das mit den zaheln ins alpahbet interieren?
2.)deine 2. antowrt verstehe ich nicht ganz meinst du +13 bzw -13 bei codieren oder meistn du bei der verschlüsselung wa ich gschreiebn hab das es bis dorhtin geh tich hab auch noch ausprobiert 123 funzt auch :confused:
3.)ich hab nichts zu den themen geunden zumindest nichts was mit VB zu tun und keine forum einträge waren. :D

Sesa_Mina 05.09.2003 22:01

Schau dir mal das beigefügte textfile an :)

Potassium 05.09.2003 22:19

wie rufe ich den code jetz auf? bzw brauche ich alles für elemente?
zb buttons textboxen etc..

Sesa_Mina 05.09.2003 22:44

Aufruf:

Dim codiert as String, decodiert as String
codiert = EncodeStr64(XORCrypt(textbox.text))
decodiert = XORCrypt(DecodeStr64(codiert))

Statt textbox.text kannst du auch eine beliebige Variable vom Typ
String, welche beliebigen Text enthalten kann, verwenden.


Hierbei wird der Text zuerst mit einem Schlüssel codiert und danach
noch base64 drübergejagt um nur Buchstaben von A-Z zu bekommen oder
so. Funktioniert ganz gut und in Verbindung mit dem Schlüssel wird
das ganze auch recht sicher.
Beim Decodieren wird das ganze umgekehrt gemacht wobei natürlich der
selbe Schlüssel verwendet werden muss.

Potassium 05.09.2003 23:07

irgendwie steh ich auf der leitung:
ich hab jetzt eine textbox mit dem namen TextBox erstellt und zwei buttons:
einer mit codiert (der befehl ned als namen)
und der andere mit dem decodiert (s.o.)

aber er speichert nix, er öffnet nix, er tut gar nix wo is der haken?
aja den restlichen code hab ich in ein modul getan. stimmt das soweit? berichtigt mich plz. :confused: :verwirrt:

Sesa_Mina 05.09.2003 23:36

In deinem Fall mit den 2 buttons würde ich das so machen:

Code:

Private Sub btnCodieren_Click()
  Textbox.text = EncodeStr64(XORCrypt(textbox.text))
End Sub

Private Sub btnDEcodieren_Click()
  Textbox.text = XORCrypt(DecodeStr64(Textbox.text))
End Sub


Somit wird der Text codiert bzw. decodiert.

Zweimaliges Anklicken des Selben buttons wird höchstwahrscheinlich
eine Fehlermeldung hervorrufen. Aber du kannst es ausprobieren.
"codiere" den Text einfach mal mehrfach hintereinander.
Du wirst ihn dann genauso oft "decodieren" müssen um wieder den
Originaltext zu erhalten.

Potassium 06.09.2003 13:12

thx is ja eh ganz simpel und logisch ;) im nachhinein is man immer gscheiter. nun noch ein frage:
standardmäßig ist so ein satz als schlüssel vorgegeben. ich hab das jetz geändert auf Schlussel = s
und in dem formcode s = inputbox ("blabllabla")
nur wenn ich jetzt kodeiren will dann schreibt er division durch null.
und zeigt folgende zeile an:
Zitat:

Code = Code & Chr(Asc(Mid(Text, Position, 1)) Xor Asc(Mid(Schlussel, 1 + ((Position - 1) Mod Lange), 1)))
was is da falsch.

Potassium 06.09.2003 13:51

so warum er division durch null zeigt weiß ich nun: er hatte die variable einfach nicht gekannt und somit als "" gesetz das funzt aber nicht.
also hab ich die inputbox einfach ins modul eingefügt. funzt eigentlich gut nur das man beim entlüsseln 4 oder 5 mal den code einegebn muss bis er das richitge ergebnis hat. wie kann ich das machen das man es nur einmal eingeben muss? (sprich er merkt sich für die restlichen 3 oder 4 mal den key aber SPEICHERT ihn ned.)

Sesa_Mina 06.09.2003 14:42

Im Modul eine "globale" Variable definieren.

Potassium 06.09.2003 18:19

@sesa_mina:
Zitat:

im modul eine globale variable definieren
das war die antwort zur vorigen frage oder? weil wie löst das das prob mit der mehrfachen schlüssel-eingabe?

Sesa_Mina 06.09.2003 18:22

Wozu tust du mehrfach codieren?

1x reicht im Normalfall

Potassium 06.09.2003 19:00

jo aber er entschlüsselt aus irgendeinem grund 4 oder 5 mal. ich merk das weil er wen ich beim entschlüsseln das pw eingebich verschieden unlesbare texte krieg und erst nach 5 mal den "klartext". deswegen denk ich das er es in verschiedenen schritten verschlüsselt und das mit den mehrern malen nicht gut ausgedrückt war.

Sesa_Mina 06.09.2003 19:08

Dann hast du irgendwo nen Blödsinn eingebaut.

Überprüf mal den code der ausgeführt wird wenn du "verschlüsselst"

Potassium 07.09.2003 13:40

hab ich gemacht. aber der code ist genau so wie du ihn gepostet hast. nur ab ich bei der bei dem teil mit dem code =... und so witer den schlussel ="dieser schlussel verschlusselt den text" ersetzt durch key1 = inputbox("kwy!"
open "pw" for output as #1
print #1, key1
close

open "pw" for input as #1
input #1, key
close
schlussel = key

und hab vorher noch dimensieoniert:
dim key1 as string, key as string
das wars was ich verändert hab.
wo is da ein fehler?
bzw ist das ned mehr so schlimm weil er sich ja jedemal den code aus der datei holt.

2. problem beim öffnen der verschlüsselten datei sagt er nachdem er die erste zeile gelesen hat dateiname oder Nr falsch.

code:
dim dateinr as integer, temp as string
dateinr = freefile

open "crypt.txt" for input as dateinr
do while not EOF(dateinr)
line input #dateinr, temp
textbox.text = textbox.text & vbCrLf & "das zum decodieren. weiß i aber grad ned auswendig"
loop
close

und nach der ersten zeile kommt dateinr oder name ist falsch.
wwwwwwwwwaaaaaaaaaaaarrrrrrrrrruuuuuuuummmmmmm?
:confused::confused::confused::confused::confused: :confused:

Sesa_Mina 07.09.2003 14:29

Ich hab jetzt schnell mal ein Bleistift für dich zusammenprogrammiert...

Potassium 08.09.2003 00:01

@ sesa_mina:
ich hab das ganze jetzt nochmal neu geschrieben. und noch ein paar ideen eingebaut. auch das von dir mit dem textdatein laden ;) aber woran das alte lag das weiß ich nicht. vielen dank nochmal für alles. und das fertige programm gibts in ein paar tagen auf meiner seite unter der rubrik downloads. www.potassium.net.tf


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag