Ezt a kódfejtős feladatot hogyan kéne megoldani?
Pénteken adta a matektanár és három ötöst adna annak aki megoldja. Én már két napja próbálom megoldani mert érdekel de sehogy sem sikerül. Csináltam hozzá egy kis képletet, amivel meg lehetne oldani de szerintem pár számnál nem működik (pl páros számoknál)
Feladat
Az ellenség a következő titkosítást használja: 31 betűs abc:
("_" a szóköz jele), a betűk értékei / kódjai:
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
_ a á b c d e é f g h i j k l m n o ö p q r s t u ü v w x y z
-Első lépésben az eredeti szöveg első betű értékeivel ciklusosan
eltolja az összes betűt (értékeinek megfelelően). Tehát pl. ha az
első betű g(=9), akkor minden betű értékéhez 9-et adunk és az így
kapott kódnak megfelelő betűt írjuk le az illető betű helyett. Ha
az összeadáskor 30-nál nagyobb számot kapunk, akkor az összegből
levonunk 31-et. (ún. ciklikus vagy "mod 31" hozzáadás).
-A második lépésben az előzőleg kapott betűsorozat második
betűjének értékeivel toljuk el, de csak azokat a betűket, amelynek a
második betűtől jobbra állnak és magát a második betűt is, az előző
bekezdásben említett módon.
-Az i-edik lépésben a legutoljára kapott betűsorozat i-edik betűjének
értékével toljuk el, de csak azokat a betűket, amelyek az i-edik betűtől
jobbra állnak és magát az i-edik betűt is.
-Az utolsó lépésben csak a legutolsó betűt toljuk el önmagával.
Példáúl: a málna (5-betűs) szó kódolása:
1. lépés: m = 15 miatt 1-5. betűket 15-tel eltoljuk (mod 31): zoy_n
2. lépés: o = 17 miatt 2-5. betűket 17-tel eltoljuk (mod 31): zbmoá
3. lépés: m = 15 miatt 3-5. betűket 15-tel eltoljuk (mod 31): zbzao
4. lépés: a = 1 miatt 4-5. betűket 1-el eltoljuk (mod 31): zbzáö
5. lépés: ö = 18 miatt 5. betűt 18-al eltoljuk (mod 31): zbzád
Feladat: dekódolja az alábbi üzenetet, amelyet a fenti módon titkosítottak:
znnseppdgqekfmz
Annak hogy megoldjuk helyetted a feladatot nincs semmi értelme. A feladat semmi olyat nem tartalmaz amit nehéz megérteni. A feladat arra van hogy te gyakoroljad az összeadást kivonást.
Javaslom hogy elsőnek a málna dekódolását csináld mert minden lépést le lehet ellenőrizni.
A betűket írd át a hozzávaló számokká és csak a végén alakítsd vissza. (kivéve ha ellenőrizni akarod a málna dekódolásánál.)
Az utolsó betűvel kezd.
Ha páratlan számmal találkozol akkor hozzá kell adni 31-et és annak kell venni a felét.
z b z á d
30 3 30 2 5
Az utolsótól. Az 5 páratlan ezért 5+31=36/2=18
30 3 30 2 18
A 2 sima ügy 2/2=1, a 18-ból is el kell venni egyet.
30 3 30 1 17
30 3 15 17 2
A 30/2=15 ,1-15 -> 1+31-15=17,17-15=2,
30 17 29 0 16
ugyanígy a 30/2=15,17-15=2,0+31-15=16, 16-15=1
15 2 14 16 1
m á l n a
Na a "znnseppdgqekfmz" is ugyanígy kell csinálni.
Elsőként az a szerencsénk, hogy páratlan számú elemből áll a kódtábla. Mivel minden karakter esetén az utolsó lépésben önmagával toljuk el a kódot, azaz gyakorlatilag megduplázzuk, így esetenként lehet következtetni arra, hogy történt-e túlfutás, vagy sem. Ha a kapott kód páros, akkor nem lehetett túlfutás. Ha viszont páratlan, akkor biztos, hogy túlfutás történt.
Pl. ha az ezzel a kódduplázással 18-at kaptunk, az lehet a 9 duplája, viszont nem lehet a (18+31)/2 = 49/2, mert az nem lenne egész szám. Viszont ha páratlan számú a kódunk, mondjuk 17, akkor az eredeti kód nem lehetett 17/2, mert az nem egész, így csak (17+31)/2 = 48/2 = 24 lehetett.
Az első karakter a legegyszerűbb, hiszen azt csak egyetlen egyszer toltuk el. Mivel önmaga kódjával toltuk el, így tulajdonképpen megdupláztuk a kódját. „z” = 30, így az eredeti karakter kódja 30/2=15 volt, ami „m” karakternek felel meg.
(Jegyezzük meg: első betű = „m”, első eltolás = 15)
A második karaktert az első lépésben 15-el toltuk el, a második lépésben ezt a kódot dupláztuk meg. Ha az eredeti kódja x volt, akkor az első lépésben ((x+15) mod 31) lett, a második lépésben (2*((x+15) mod 31)) mod 31 lett. A második karakter „n”, aminek a kódja 16. Az eredeti kód tehát vagy 16/2=8, vagy (16+31)/2=47/2 volt. Ez utóbbi nem adna egészet, így tudjuk, hogy a második lépés előtt a második karakter kódja 8 volt. Az első lépésben 15-el való eltolás volt, így az eredeti kódja vagy 8-15, ami ugye negatív szám, így az nem lehetett, vagy (8+31)-15 = 24 volt, ami „u” betű.
(Jegyezzük meg: második betű = „u”, második eltolás = 8)
A harmadik karaktert az harmadik lépésben dupláztuk. A harmadik karakterünk „n”, aminek a kódja 16, így a harmadik lépés előtt csak és kizárólag 8 lehetett a kód, ebből kell levonni az eddigi eltolásokat: 8-(8+15)=-15. Itt tehát volt túlfutás, az eredeti kódot megkapjuk, ha addig adunk hozzá 31-et, amíg nem esik [0,30] intervallumba. Ezek alapján a harmadik karakter kódja 16 volt eredetileg, azaz egy „n” betű.
(Jegyezzük meg: harmadik betű = „n”, harmadik eltolás = 8)
És így tovább…
Röviden:
1. Állíts be egy ofszet értéket nullára!
2. Vedd sorba a karaktereket és végezd el az alábbi – 2-től 8-ig számozott –
műveleteket vele:
3. Vedd az kapott karakter kódját!
4. Ha a 3. lépésben kapott kód páros, oszd el kettővel, ha páratlan, akkor adj hozzá 31-et, és utána oszd el kettővel!
5. A 4. lépésben kapott kódból vond ki az ofszet értékét.
6. Ha szükséges, növeld az 5. lépésben kapott értéket 31-el addig, amíg nem kapsz nullánál nagyobb számot.
7. Keresd ki ér írd ki a 6. lépésben kapott kódhoz tartozó karaktert.
8. Add hozzá az ofszet értékéhez a 4. lépésben kapott értéket.
Ha lőszert látsz, ne ijedj meg! ;-)
nekem az jött ki, hogy ha
x_1, ..., x_n
az eredeti szöveg betűinek megfelelő számok ebben a sorrendben és
y_1, ..., y_n
a kapott kód betűinek megfelelő számok ebben a sorrendben, akkor
x_i = [y_i - (y_1 + y_2 + ... + y_{i-1})]/2
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!