www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

vorherige Seite 1 2 3 nächste Seite

Siracusa

Gepostet:
28.01.2007 18:35

   
Vorneweg erst einmal: Keine Scheu vor dem Du, wir dutzen uns hier im Forum alle.

Dann zum Faktor. Der Faktor muß auch bei der Entschlüsselungsfunktion gegeben sein, da der Klartext sonst nicht eindeutig wiederherstellbar wäre (genau wie der Summand bei der einfachen Verschiebemethode).

Und zu guter letzt nochmal zu der Multiplikationsmethode. Da hab ich mal nachgeblättert und mir ist aufgefallen, daß du deine ursprüngliche Variante auch verwenden kannst, wenn du dich darauf beschränkst, nur solche Faktoren n zu verwenden, die mit dem Modul p keinen gemeinsamen Teiler haben, also gcd n p == 1. p kann dann aber beliebig sein.
Bei meinem Vorschlag müßte ord w erst einmal um 1 verschoben werden, damit nicht mit den Zahlen von 0..255, sondern von 1..256 gerechnet wird (um ein eindeutiges Inverses zu garantieren). Die so verschobene Zahl kann dann mit n multipliziert werden und das Ergebnis modulo p=257 genommen werden. Da nun wieder eine Zahl zwischen 1..256 herauskommt, muß wieder um 1 zurückverschoben werden und das Ergebnis in einen Char umgewandelt werden. Die entsprechende encode-Funktion sieht dann so aus:

encode "" _ = []
encode (w:ws) n = chr ((mod (n*(1+ord w)) 257)-1) : encode ws n

Die Entschlüsselungsfunktion dann nach dem selben Prinzip, nur eben mit n'.

Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Blacksoul

Gepostet:
28.01.2007 20:12

   
in manchen foren sind ein paar leute, die man nicht mit du anreden sollte, weil man weiß, sie sind schon "weit" üebr 18

Ich werd mich morgen mal versuchen, etwas hinzubekommen...


dann danke ich dir^^...
Zum Seitenanfang    
 
Jacke

Gepostet:
29.01.2007 21:36

   
bei nen "sie" würde ich mir auch ganz schön alt vorkommen...Smilie
Zum Seitenanfang    
 
Blacksoul

Gepostet:
29.01.2007 22:14

   
ûnd noch was konstruktives zum thema? :D

hmmm...donnerstag muss ich es fertig haben...bleiben mir ja nichtmehr viele tage :/
Zum Seitenanfang    
 
Blacksoul

Gepostet:
30.01.2007 22:17

   
soo...da nun mein pc ein problem hat und alle programme fast automatisch schließt(u.a. auch winhugs) kann ich das proggen der sache komplett vergessen...

ich danke trotzdem für all eure bemühungen..:/

mfg
Edit: Wenn ich es chiffriere, muss ich es dann nich auch mit mod 257 machen? bzw. 256?
Zum Seitenanfang    
 
Jacke

Gepostet:
31.01.2007 07:13

   
ja da solltest du auch modulo teilen ...sonnst kommt sowas raus...
__ __ __ __ ____ ___


Main> caesar "z" 1
"{"
Main> caesar1 "z" 1
"{"
Main>


hast du mal versucht hugs neuzuinstallieren?

gruß jacke

ps: die funktion von siracusa kann man zum ver und entschlüßeln verwenden...
verschlüßeln: encode text n
entschlüßeln : encode text (1/n)

du solltest aber noch runden in die funktion einbauen..sonst klappt das nich so ganz mit den brüchen ...;-)
Zum Seitenanfang    
 
Blacksoul

Gepostet:
31.01.2007 13:54

   
hugs neu install -> geht nicht...da meine systemdatein irgendwie im arsch(sry) sind und kaum ein prog somit richtig geht..

dein post mit dem 1/n usw. hab ich nun wieder nicht verstanden :/

ich hab nunmal im normalen hugs ohend atei zu laden erstmal :l Char und dann dies gemacht:
-->
ord 'r' * 8 = 912

mach ich aber ord 'r' = 144 * 8 = 1152 ....was nun? Oo
<--
mfg

<--Edit: verguckt *sry*--> ..ich probier bis nachher nochmal was hinzubekommen..
Zum Seitenanfang    
 
Blacksoul

Gepostet:
31.01.2007 19:04

   
Genial! ich danke euch!

ich hoffe mal, dass der Code nun so richtig ist, jedoch bin ich mir net sicher, da ich ja nur die Teile probieren konnte:

multcaesar:: String -> Int -> String
multcaesar "" n = ""
multcaesar (x:xs) n = (chr ((( ord x)*n) `mod` 255)) :multcaesar xs n

demultcaesar :: String -> Int -> String
demultcaesar "" n = ""
demultcaesar (x:xs) n = (chr (((ord x) * (mult_inverse n)) `mod` 257)) : demultcaesar xs n

mult_inverse :: Int -> Int
mult_inverse n = [x|x <- [1..256], (x * n) `mod` 257 == 1]


Eine kleine Erklärung, die ich vlt noch morgen vorlegen muss:

multcaesar:
gesucht ist das verschlüsselte w, bei einem modulo p=257, damit es beim zurückrechnen von jeder zahl darunter 1..256 ein Inverse-->(wie kann man das wort erklären?)<-- gibt, da 257 eine Primzahl ist, und einem Faktor n:

c = n*w mod p (mal von dir geklaut^^)

demultcaesar: w = n'c mod p

n' multiplikative inverse zu n, wenn man jetzt noch wüsste was das "inverse" eigentlich ist, bzw. was der begriff bedeutet, wie man den erklären kann^^ bzw. was ist en e "umkehrfunktion" ^^

und inverse gibt eben die umkehrfunkt aus, wobei dee begriff mir so wenig sagt^^..

------------------------------------------------
Ich danke Euch auf jeden Fall schonmal für alles^^....da werd ich wohl euch in nächster Zeit öfter beschäftigen :D


Zum Seitenanfang    
 
Siracusa

Gepostet:
31.01.2007 22:08

   
Hi nochmal,

der Vorschlag von Jacke mit 1/n funktioniert hier eben nicht, weil man nicht wie gewohnt in den reelen Zahlen rechnet, sondern in einem Ring mit ganzen Zahlen. Und 1/n ergibt nicht wieder eine ganze Zahl.

Das Inverse ist ein mathematischer Begriff. Du kannst dir das Inverse zu einem Element e aus einer Menge (z.B. reele Zahlen) wie so eine Art Anti-Element vorstellen, die beide zusammen wieder ein neutrales Element ergeben. Das Inverse von e bzgl. der Addidion ist also -e. Oder bzgl. der Multiplikation 1/e. Bei der Rechnung im Ring ist das finden des Inversen nur etwas komplizierter. Am besten läßt sich das durch eine Formel beschreiben. Wenn e und eine Primzahl p gegeben sind und folgende Gleichung ist erfüllt: e*e' mod p = 1. Dann ist das e' das Inverse zu e im Ring modulo p. Kannst ja bei Wikipedia mal nach "Körper (Algebra)" oder "Ring (Mathematik)" suchen.

Dann noch zum Code:
mult_inverse gibt bei dir noch ne Liste zurück. Soll aber ein int sein, du brauchst also nur noch head vor die Liste schreiben, dann wird das erste Element der Liste zurückgegeben.
Und bei den anderen beiden Funktionen fehlen noch die Verschiebungen +1 und -1. Weil z.B. zu 0 kein Inverses existiert. Und der Modul muß in beiden Funktionen gleich sein, also 257.

Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Blacksoul

Gepostet:
31.01.2007 22:18

   
ach..bei multcaesar hatte ich das nur kopier...257 muss da logisch hin^^...

das mit der verschiebung versteh ich im moment leider nicht : mit dem 1+ und -1 aber es müsste dann so aussehen oder(von dir mal kurz zu so abgeguckt^^):


multcaesar:: String -> Int -> String
multcaesar "" n = ""
multcaesar (x:xs) n = chr((mod(n*( 1+ord x) 257 )-1) :multcaesar xs n

demultcaesar :: String -> Int -> String
demultcaesar "" n = ""
demultcaesar (x:xs) n = chr((mod((mult_inverse n)*( 1+ord x) 257 )-1) : demultcaesar xs n

mult_inverse :: Int -> Int
mult_inverse n = [x|x <- [1..256], (x * n) `mod` 257 == 1]


so richtig?

das mit dem inverse glaube ich verstanden zu haben...danke :)
Zum Seitenanfang    
 

vorherige Seite 1 2 3 nächste Seite