Seite 1 von 2

Kein richtiger Verschlüßler

Verfasst: 15.12.2005 19:21
von R4z0r1989
Kann mir wer helfen und zwar will ich das Programm das ich optisch schon gemacht hab in so was ahnliches wie nen Verschlüßler verbaun.

Funktionieren soll es wie folgt: Wenn man nen Text verschlüßeln will:

a>n
b>o
c>p
d>q
e>r
f>s
g>t
h>u
i>v
j>w
k>x
l>y
m>z
n>a
o>b
p>c
q>d
r>e
s>f
t>g
u>h
v>i
w>j
x>k
y>l
z>m

Und beim entschlüsseln genau andersrum.

Code: Alles auswählen

; PureBasic Visual Designer v3.80 build 1249


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Gadget_0
  #Gadget_1
  #Gadget_2
  #Gadget_3
  #Gadget_4
  #Gadget_5
  #Gadget_6
  #Gadget_7
  #Gadget_8
  #Gadget_9
EndEnumeration

;- Fonts
;
Global FontID1
FontID1 = LoadFont(1, "Arial Black", 16)



Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 370,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      StringGadget(#Gadget_0, 10, 60, 580, 50, "")
      TextGadget(#Gadget_1, 10, 40, 300, 20, "Eingegebener Text als ASCII")
      TextGadget(#Gadget_2, 10, 110, 200, 20, "Ausgegebener Text als FTCII")
      StringGadget(#Gadget_3, 10, 130, 580, 50, "", #PB_String_ReadOnly)
      TextGadget(#Gadget_4, 10, 10, 410, 30, "Verschlüßler:")
      SetGadgetFont(#Gadget_4, FontID1)
      TextGadget(#Gadget_5, 10, 190, 160, 30, "Entschlüßler:")
      SetGadgetFont(#Gadget_5, FontID1)
      TextGadget(#Gadget_6, 10, 220, 160, 20, "Eingegebener Text als FTCII")
      StringGadget(#Gadget_7, 10, 240, 580, 50, "")
      TextGadget(#Gadget_8, 10, 290, 160, 20, "Ausgegebener Text als ASCII")
      StringGadget(#Gadget_9, 10, 310, 580, 50, "", #PB_String_ReadOnly)
      
    EndIf
  EndIf
EndProcedure

Open_WIndow_0()

Repeat
  EventID = WaitWindowEvent()

     Select EventID 
       Case #PB_Event_Gadget 
         Select EventGadgetID() 

;           Case #Gadget_0 :

            
         EndSelect 

     EndSelect  

     
     If EventID = #PB_Event_CloseWindow 
       Quit = 1 
     EndIf

Until Quit = 1

End
Danke für jede Hilfe!!!

Verfasst: 15.12.2005 19:25
von MVXA
Das ist keine Verschlüsselung sondern eine Codierung. Nur so als Hinweis.

Verfasst: 15.12.2005 19:30
von Kristel
2 Wörter: Vergiss es !

Dieses Verfahren ist leicht implementieren,
aber genau so leicht zu knacken. Man müsste
nur eine Häufigkeitsanalyse machen. Nimm
einfach einen anderen Algorithmus.

Wenn du es trotzdem so machen willst.
Dann schau hier.

@MVXA Du hast Recht. Eigentlich ist es keine Verschlüsselung, eher eine
Codierung. Oder eine Verschlüsselung die den Namen nicht verdient

Verfasst: 15.12.2005 19:50
von Kaeru Gaman
@Kristel:

wo ist das problem?

er hat nicht gesagt, dass er irgendwelche bankdaten verschlüsseln will.

er hat um hilfe bei der implementierung dieses uralten codierverfahrens gebeten.

und es ist nicht der Ceasar-Key, wie in dem Beispiel,
das beruht auf einer verschiebung, nicht auf durcheinanderwürfeln.

edit:
ich seh grad, ist doch nur ne verschiebung, sorry...
is ja earm...


@Badboy

die grunddaten würde ich in ein array packen, und den code z.b. in Data-zeilen.

Verfasst: 15.12.2005 20:04
von sen-me
also bei richtigen verschlüsseln mach ich es immer so:
ich lese die bytes einer datei aus (natürlich leide ner größe limit) und geh nun jedes byte einzeln durch

davor wurde ein string als passwort angegeben
ich nehm mir nun jedne buchstaben dieses passwortes und wandel es in ein ASCII zahl um, und speicher die in eine DIM (array), die vorher mit len() des passwortes festgelegt wurde

nun nimmt er jeden byte (bei vershclüsslung) und zählt den ascii zahl dazu, und speichert das wieder
das macht er mit jedme byte (beim entschlüsseln tu ich es abziehn)

natürlich wird nicht imemr der selbe ASCII dazugezählt, sondern er macht es so
(nur beispiel)
A=31
B=10
E=24
R=27
passwort ist also ABER
nun habe ich 4 byte datei (lol)
23|6|135|24

beim vershclüsseln siehts nache rso aus
23+31|6+10|135+24|24+27
(wenns über 255 geht fängt er bei 1 ja wieder an oda so, jedenfalls ises egal, denn beim entschlüsseln gehts ja wieder zurück)

die methode ist relativ sicher, da nun A nicht den selben byte nun haben, d.h.
eine häufichkeitsanalyse wird nicht funktionieren, ich denke die einzige chance ist es nun, rauszufinden (was eigentlich schon ziemlich unmöglich ist) 1. wie lang das pw war
2. welche bytes dazugezählt wurden
3. was der einfachste teil dan wäre, sie wiede rin buchstaben zu machen

soviel zu meiner methode :D

Verfasst: 15.12.2005 23:15
von Thorsten1867
Hier zwei Prozeduren:

Code: Alles auswählen

Procedure.s  Encode(name$)
  Nr$ = ""
  name$ = UCase(name$)
  For b = 1 To Len(name$)
    ZC = Asc(Mid(name$,b,1))
    If ZC >= 65 And ZC <= 74
      Nr$ + Chr(ZC - 17)
    ElseIf ZC >74 And ZC <= 90
      Nr$ + Chr(ZC - 10) 
    ElseIf ZC = 32
      Nr$ + "-"
    Else
      Nr$ + Chr(ZC) 
    EndIf 
  Next b
  ProcedureReturn Nr$
EndProcedure

Code: Alles auswählen

Procedure.s  Decode(Nr$)
  name$ = ""
  For b = 1 To Len(Nr$)
    ZC = Asc(Mid(Nr$,b,1))
    If ZC >= 48 And ZC <= 57
      name$ + Chr(ZC + 17)
    ElseIf ZC >65 And ZC <= 81
      name$ + Chr(ZC + 10) 
    ElseIf ZC = 45
      name$ + " "
    Else
      name$ + Chr(ZC) 
    EndIf 
  Next b
  ProcedureReturn name$
EndProcedure
Die richtige Verschiebung musst du selbst anpassen (hier um: 10 bzw. 17). Die IF-Abfrage dient dazu, dass die Zeichen zwischen Buchstaben und Zahlen in der ASCII-Tabelle übersprungen werden.

Verfasst: 15.12.2005 23:40
von edel
Nennt man Rot13 , im Codearchiv gibt es das hier :
http://www.purearea.net/pb/CodeArchiv/E ... ryption.pb

Verfasst: 16.12.2005 10:06
von Laurin
Rot13 ist ein Spezialfall der obrigen Verschlüsselung/Codierung.

Man kann da nämlich die Verschlüsslungsroutine auch zum Entschlüsseln benutzen, sofern man nur 26 Zeichen verwendet (A-Z).

Verfasst: 16.12.2005 15:45
von ZeHa
Vielleicht geht es dem BadBoy ja nicht darum, das genialste Verschlüsselungsverfahren der Welt zu machen, sondern schlicht und einfach nur darum, Programmieren zu lernen, und da er diese eigentlich nicht allzu schwere Aufgabe nicht hinkriegt, wäre es doch sinnvoller, es ihm einfach zu erklären statt nur darüber zu diskutieren ob das Verfahren was taugt. Ihr wißt ja noch nicht mal, wofür er es überhaupt benötigt.

Also ich würde auf jeden Fall noch einen Button dazumachen, der praktisch dafür zuständig ist, die Ver- / Entschlüsselung auszuführen. Dieser ruft dann eine Funktion auf, die z.B. so aussehen kann:

EDIT: Okay, hatte die Prozeduren von Thorsten nicht gesehen, die sind besser als meine, aber zwecks Vollständigkeit laß ich meinen Code einfach drin

Code: Alles auswählen

Procedure.s Encode(text$)
  text$ = LCase(text$)
  For i = 1 to Len(text$)
    zeichen = Asc(Mid(text$,i,1))+13
    If zeichen > 122
      zeichen = zeichen - 26
    EndIf
    neu$ = neu$ + Chr(zeichen)
  Next i

  ProcedureReturn neu$
EndProcedure
Die Entschlüsselung sieht fast gleich aus:

Code: Alles auswählen

Procedure.s Decode(text$)
  text$ = LCase(text$)
  For i = 1 to Len(text$)
    zeichen = Asc(Mid(text$,i,1))-13
    If zeichen < 97
      zeichen = zeichen + 26
    EndIf
    neu$ = neu$ + Chr(zeichen)
  Next i

  ProcedureReturn neu$
EndProcedure
Das ist jetzt nur 'ne ganz simple Implementierung und wandelt alle Großbuchstaben in kleine um (durch LCase). Mit ein paar geschickten If-Abfragen kannst Du es aber auch so umbauen, daß es mit großen ebenfalls funktioniert ;)

Ach ja, ich habs nicht getestet, sollte aber funktionieren... wenn nicht, sag bescheid...

Verfasst: 16.12.2005 16:16
von R4z0r1989
Danke ZeHa du hast recht ich will das Programmieren richtig lernen!!!
und danke an alle andren die mit Diskusionen die Antwort Meiner Frage immer weiter nach unten rutschen liesen!!!


Und noch was was zwar nicht hier reingehört aber ich will keinen neuen Beitrag dafür machen:

WIe kann Ich in ein Set Gadget einen String benutzen statt die Zahl???

Code: Alles auswählen

SetGadgetState(#Gadget_2, sekunde$)