Verschlüsselungs Problem[Gelöst]
Übersicht

![]() |
SephkaBetreff: Verschlüsselungs Problem[Gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ein einfaches Verschlüsselungspogramm geschrieben(dass ver- und entschlüsselt) ,aber sobald man mehr als ein zeichen eingibt scheint es in einer undendlichen Schleife aufzuhängen.
Code: [AUSKLAPPEN] Graphics 600,600,16,2
Global code$,code2$,txt$,i%,decryp$ eingabe$ = Input("Dein Text") Cls Print "Vorher: " + eingabe$ cryp(eingabe$) Print "Nachher: " + code$ decryp(code$) Print decryp$ Function cryp(txt$) For i=1 To Len(txt$) code$ = code$ + Hex(Asc(Mid(txt$,i%,1))) code$ = Replace$ (code$, "0","") code$ = Trim(code$) Next End Function Function Decryp(code$) For i=1 To Len(code$) decryp$ = decryp$ + Chr(HexToInt(Mid(code$,i%,2))) Next End Function Function HexToInt(Hexzahl$) If Left$(Hexzahl$,1)="$" Then Hexzahl$=Mid$(Hexzahl$,2) For i=1 To Len(Hexzahl$) tmp1$=Upper$(Mid$(Hexzahl$,i,1)):tmp2=tmp1$ If tmp2=0 And tmp1$<>"0" Then tmp2=Asc(tmp1$)-55 Integer_Result=Integer_Result*16:Integer_Result=Integer_Result+tmp2 Next Return Integer_Result End Function Was tun? |
||
- Zuletzt bearbeitet von Sephka am Mi, Aug 04, 2010 18:34, insgesamt einmal bearbeitet
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Debuggen. Setze Debuglogs die dir temporäre Daten ausgeben und du bekommst es heraus.
2. ist das kein umkehrbares Verschlüsselungsverfahren. 3. Das Problem ist: i ist global und wird von zwei Funktionen, von der die eine die andere aufruft in Schleifen verwendet -> das kann nicht gut gehen ![]() mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Debuggen. DebugLog![]() ![]() Lass dir alles wichtige ausgeben, welche Funktion, welcher Schleifendurchlauf usw. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es hängt nicht mehr aber warum ist es nicht unmkehrbar? | ||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil die Hexadezimale Schreibweise auch die 0 verwendet und ein Stellenwertsystem ist. Ich nehme an, du wolltest nur die Nullen am Beginn entfernen, was ja richtig ist. Dazu darf man aber keines Falls Replace verwenden.
Code: [AUSKLAPPEN] P = 50 (Hex) -> Entfernung von 0 -> 5
Chr(5) != P mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry das versteh ich nicht ganz könntest du es bitte erklärn ![]() |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, du wandelst ja jedes Zeichen des Textes zu Hexadezimal um und hängst es an einen String.
Angenommen der Text ist "APFEL": dann kommt der String "41546454C" heraus. Aus dem "P" würde 50, allerdings ersetzt du jede 0 durch "" und ab diesem Moment ist es nicht mehr eindeutig umkehrbar: eine Umkehrung würde den String "ATdT"+Chr(12) erzeugen. Ich hoffe das war verständlicher. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ich habs verstanden.Jetzt krieg ich nicht raus wie ich nur die ersten Nullen entfernern kann :\
Ich habs jetzt so Code: [AUSKLAPPEN] Graphics 600,600,16,2
Global code$,code2$,txt$,i%,e%,decryp$,teil$ eingabe$ = Input("Dein Text") Cls Print "Vorher: " + eingabe$ cryp(eingabe$) Print "Nachher: " + code$ decryp(code$) Print decryp$ Function cryp(txt$) For i=1 To Len(txt$) teil = Hex(Asc(Mid(txt$,i%,1))) teil = Mid(teil,7,-1) code$ = code$ + teil Next End Function Function Decryp(code$) For i=1 To Len(code$) decryp$ = decryp$ + Chr(HexToInt(Mid(code$,i%,2))) Next End Function Function HexToInt(Hexzahl$) If Left$(Hexzahl$,1)="$" Then Hexzahl$=Mid$(Hexzahl$,2) For e=1 To Len(Hexzahl$) tmp1$=Upper$(Mid$(Hexzahl$,e,1)):tmp2=tmp1$ If tmp2=0 And tmp1$<>"0" Then tmp2=Asc(tmp1$)-55 Integer_Result=Integer_Result*16:Integer_Result=Integer_Result+tmp2 Next Return Integer_Result End Function Aber es klappt immer noch nicht |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte man so lösen:
BlitzBasic: [AUSKLAPPEN] Local test$="000100203000" |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ne klappt iwie nicht | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Fehler liegt da:
BlitzBasic: [AUSKLAPPEN] Function Decryp(code$) Ohne Step ![]() Edit: D.H. du musst auch darauf achten, das der Code immer eine Gerade Anzahl Zeichen hat - sonst kann es zu Fehlern kommen. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 600,600,16,2
Global code$,code2$,txxt$,i%,e%,decryp$,teil$ eingabe$ = Input("Dein Text") Cls Print "Vorher: " + eingabe$ cryp(eingabe$) Print "Nachher: " + code$ decryp(code$) Print decryp$ Function cryp(txt$) For i=1 To Len(txt$) teil = Hex(Asc(Mid(txt$,i%,1))) teil = Mid(teil,7,-1) code$ = code$ + teil Next End Function Function Decryp(code$) For i=1 To Len(code$) Step 2 decryp$ = decryp$ + Chr(HexToInt(Mid(code$,i%,2))) Next End Function Function HexToInt(Hexzahl$) If Left$(Hexzahl$,1)="$" Then Hexzahl$=Mid$(Hexzahl$,2) For e=1 To Len(Hexzahl$) tmp1$=Upper$(Mid$(Hexzahl$,e,1)):tmp2=tmp1$ If tmp2=0 And tmp1$<>"0" Then tmp2=Asc(tmp1$)-55 Integer_Result=Integer_Result*16:Integer_Result=Integer_Result+tmp2 Next Return Integer_Result End Function Habs jetzt so gelöst ,Danke |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group