Forum » Programiranje » kodiranje in dekodiranje
kodiranje in dekodiranje
gobice ::
Hello!
Eno enostavno vprašanje, ki me muči že dolg časa, pa mi ni jasno...
Imam stavek "Riba, raca rak.", ki ga znak-po-znak prevedem v skladu z mojo tabelo kodiranja v npr. "roegneorbenrbo". Kako bi vi dekodirali ta niz, če moje kodirne tabele ne poznate?
Men se zdi to zelo preprosta "enkripcija", vendar zakaj je to tolk lahko dekodirat, kako se sploh lotit, sej ne morš vedet kaj je kej?
Hvala :)
Eno enostavno vprašanje, ki me muči že dolg časa, pa mi ni jasno...
Imam stavek "Riba, raca rak.", ki ga znak-po-znak prevedem v skladu z mojo tabelo kodiranja v npr. "roegneorbenrbo". Kako bi vi dekodirali ta niz, če moje kodirne tabele ne poznate?
Men se zdi to zelo preprosta "enkripcija", vendar zakaj je to tolk lahko dekodirat, kako se sploh lotit, sej ne morš vedet kaj je kej?
Hvala :)
Nerdor ::
Ok ti bom odgovoril. Lahko jo je dekodirat zato, ker si pomen znakov zamenjal. Ve za dolžino, in ve, da nisi rotiral naprej ali nazaj in gre samo za spremembo znakov. Res pa je, če nima referenčne odkodirane besede, bo zelo zelo zežko odkodiral. V tem se strinjam.
Enkodiranje, torej šifriranje je dosti uspešneje, če uporabiš poleg zamenjave znakov, še takoimenovani rotacijski krog.
Postopek:
- zamenjaš znak, recimo "a" v "e", "b" v "o", "c" v "g" in itd. Predstavljaj si, da sta oba sklenjena kot krog.
- in potem še zavrtiš naprej ali nazaj, za recimo 3 mesta po krogu.
Sedaj je problem, poleg, da se ugotovi, katera črka je zamenjana, še koliko mest se je zavrtel in v katero smer.
Rimljani so poznali ROT3. Imeli so dva kamena kroga. En krog je bil abeceda, drugi pa njegov soparni znak. Ko je rimski vodja, našel črko pod njeno sopomenko. (recimo "a" na prvem krogu v "e" na drugem, je sledil zavrt kroga v poljubno smer (levo ali desno) za dogovorjeno št. znakov (ponavadi 3)).
Tako delujejo nekdaj v unixu (in tudi v kakšem programu) ROT13 in ROT26 in itd.
DES pa mislim, da deluje na principu večih kriptirnih tabel. Namesto ene jih imaš več. Recimo originalni "a" gre v 1 kript. tabelo v "e" iz te gre v 2 kript. tabelo kot "l" iz te gre v 3 kript. tabelo kot "u" in itd.
Sedaj si pa dekripterja pošteno zmedel, ker poleg tega, da neve katera je prava črka neve, koliko je teh enkriptirnih tabel. Sedaj naj ugane.
Ker, ko ve, da je 1 plast/tabel, bo poizkušal toliko časa, dokler ne pride do smiselne besede. Smiselne besede, pa si prepiše iz Slovarja/Besednjaka in spusti skozi program v brute force. Z malo spretnosti in dobro založenimi možnimi besedamo (word file-i ali dictionary-i) je precej lahko napisati program, ki bo dekriptiral tvoje "roegneorbenrbo" v smiselno obliko "Riba, raca rak.".
Kaj pa, če je več plasti, takrat pa brute force tehnike odpadejo..
Enkodiranje, torej šifriranje je dosti uspešneje, če uporabiš poleg zamenjave znakov, še takoimenovani rotacijski krog.
Postopek:
- zamenjaš znak, recimo "a" v "e", "b" v "o", "c" v "g" in itd. Predstavljaj si, da sta oba sklenjena kot krog.
- in potem še zavrtiš naprej ali nazaj, za recimo 3 mesta po krogu.
Sedaj je problem, poleg, da se ugotovi, katera črka je zamenjana, še koliko mest se je zavrtel in v katero smer.
Rimljani so poznali ROT3. Imeli so dva kamena kroga. En krog je bil abeceda, drugi pa njegov soparni znak. Ko je rimski vodja, našel črko pod njeno sopomenko. (recimo "a" na prvem krogu v "e" na drugem, je sledil zavrt kroga v poljubno smer (levo ali desno) za dogovorjeno št. znakov (ponavadi 3)).
Tako delujejo nekdaj v unixu (in tudi v kakšem programu) ROT13 in ROT26 in itd.
DES pa mislim, da deluje na principu večih kriptirnih tabel. Namesto ene jih imaš več. Recimo originalni "a" gre v 1 kript. tabelo v "e" iz te gre v 2 kript. tabelo kot "l" iz te gre v 3 kript. tabelo kot "u" in itd.
Sedaj si pa dekripterja pošteno zmedel, ker poleg tega, da neve katera je prava črka neve, koliko je teh enkriptirnih tabel. Sedaj naj ugane.
Ker, ko ve, da je 1 plast/tabel, bo poizkušal toliko časa, dokler ne pride do smiselne besede. Smiselne besede, pa si prepiše iz Slovarja/Besednjaka in spusti skozi program v brute force. Z malo spretnosti in dobro založenimi možnimi besedamo (word file-i ali dictionary-i) je precej lahko napisati program, ki bo dekriptiral tvoje "roegneorbenrbo" v smiselno obliko "Riba, raca rak.".
Kaj pa, če je več plasti, takrat pa brute force tehnike odpadejo..
Zgodovina sprememb…
- spremenil: Nerdor ()
Thomas ::
Ruska šifra zamaskira vsak tekst tako, da vsakemu znaku prišteje (po modulu!) neke random številke.
Odpre ga lahko le tisti, ki ta random listek ima.
Ostalo, se pa da vse uganit.
Odpre ga lahko le tisti, ki ta random listek ima.
Ostalo, se pa da vse uganit.
Zgodovina sprememb…
- spremenil: Thomas ()
Nerdor ::
wikipedia rot 13 in malce bolj komplicirani des algoritem.
Zgodovina sprememb…
- spremenil: Nerdor ()
gobice ::
Hvala za zelo lep odgovor...
Torej z brute force poskušaš najti dekodiranje neke znane besede, ki je skoraj zagotovo v zakodiranem besedilu. A se kaj bistveno spremeni, če preslikava ni več 1:1, ampak recimo vsak drugi znak povečam za npr. 7?
Torej z brute force poskušaš najti dekodiranje neke znane besede, ki je skoraj zagotovo v zakodiranem besedilu. A se kaj bistveno spremeni, če preslikava ni več 1:1, ampak recimo vsak drugi znak povečam za npr. 7?
Thomas ::
> A se kaj bistveno spremeni, če preslikava ni več 1:1, ampak recimo vsak drugi znak povečam za npr. 7?
No, se spremeni. Metoda dekodiranja je zapletenejša in jo je težje ugant.
Samo vse razen Ruske šifre in kvantnega kodiranja - je bolj bogo.
No, se spremeni. Metoda dekodiranja je zapletenejša in jo je težje ugant.
Samo vse razen Ruske šifre in kvantnega kodiranja - je bolj bogo.
gobice ::
Zanimivi linki... ENIGMA mi na prvi pogled deluje kot tisti rimski krogi. A kot ruska šifra si mislu mogoče GOST? Samo če seštevaš z nečim po modulu, lahko dobiš preslikavo več-v-eno, sej pol še sam ne veš, kaj je blo v originalu
Si sploh ne znam predstavljat, kako bi se lotu dekriptirat česarkoli. Sej niti ne veš al gre za tekst, sliko, zvok... ne veš katere "besede" bi iskal, ne veš al bi poskušaš najprej s prištevanjem, odštevanjem, množenjem, whatever, ... ali bi prišteval vsakemu znaku, ali samo vsakemu drugemu... da na večkratno rotiranje niti ne pomislim... A mislite, da se dekripcija vrši v glavnem s poskušanjem vsega po vrsti?
Ne vem sicer kako, ampak verjetno se da iskanje nekako "usmerit"... sej drugač lahko samo obupaš...
Si sploh ne znam predstavljat, kako bi se lotu dekriptirat česarkoli. Sej niti ne veš al gre za tekst, sliko, zvok... ne veš katere "besede" bi iskal, ne veš al bi poskušaš najprej s prištevanjem, odštevanjem, množenjem, whatever, ... ali bi prišteval vsakemu znaku, ali samo vsakemu drugemu... da na večkratno rotiranje niti ne pomislim... A mislite, da se dekripcija vrši v glavnem s poskušanjem vsega po vrsti?
Ne vem sicer kako, ampak verjetno se da iskanje nekako "usmerit"... sej drugač lahko samo obupaš...
|CyGNUS-x ::
Lahko uporabiš Thomasov model, ki prišteje neko random cifro. To sem tud sam preizkuso pa nobenemo ni bili jasno. V kombinaciji z t.i. dvojno abecedo pa bo vsak opustil dekripcijo.
Ni in ne more biti nobenega drugega načina za preizkušanje
resnične moči kapitalistične države kot je vojna.
resnične moči kapitalistične države kot je vojna.
64202 ::
Kolikor razumem mora biti "kljuc" pri tej random metodi velik toliko kot sporocilo + vsakic mora bit drugacen. Usability v realnem svetu trpi.
Drugace, koliko slabse je, ce reusas en 1024 bajten kljuc? Hm, verjetno neskoncno :).
Drugace, koliko slabse je, ce reusas en 1024 bajten kljuc? Hm, verjetno neskoncno :).
neoto ::
Kaj pa kaj takega (dobil na enem cd-ju s primeri za VB):
To sta samo ta glavni dve proceduri
mstrKey - ključ za kodiranje
mstrText - vsebina za kodiranje
'~~~.DoXor
'Exclusive-or method to encrypt or decrypt
Public Sub DoXor()
Dim lngC As Long
Dim intB As Long
Dim lngN As Long
For lngN = 1 To Len(mstrText)
lngC = Asc(Mid(mstrText, lngN, 1))
intB = Int(Rnd * 256)
Mid(mstrText, lngN, 1) = Chr(lngC Xor intB)
Next lngN
End Sub
'Initializes random numbers using the key string
Private Sub Initialize()
Dim lngN As Long
Randomize Rnd(-1)
For lngN = 1 To Len(mstrKey)
Randomize Rnd(-Rnd * Asc(Mid(mstrKey, lngN, 1)))
Next lngN
End Sub
To sta samo ta glavni dve proceduri
mstrKey - ključ za kodiranje
mstrText - vsebina za kodiranje
'~~~.DoXor
'Exclusive-or method to encrypt or decrypt
Public Sub DoXor()
Dim lngC As Long
Dim intB As Long
Dim lngN As Long
For lngN = 1 To Len(mstrText)
lngC = Asc(Mid(mstrText, lngN, 1))
intB = Int(Rnd * 256)
Mid(mstrText, lngN, 1) = Chr(lngC Xor intB)
Next lngN
End Sub
'Initializes random numbers using the key string
Private Sub Initialize()
Dim lngN As Long
Randomize Rnd(-1)
For lngN = 1 To Len(mstrKey)
Randomize Rnd(-Rnd * Asc(Mid(mstrKey, lngN, 1)))
Next lngN
End Sub
Zgodovina sprememb…
- spremenil: neoto ()
Thomas ::
64202,
Ja. Vedno mora biti drug. Moraš imeti (vsaj) tolik random števil, kolikor imaš znakov za poslat. To je mandatorno, ja.
Seštevanje po modulu pa je okay, ni dvoumnosti, če prav delaš.
Ja. Vedno mora biti drug. Moraš imeti (vsaj) tolik random števil, kolikor imaš znakov za poslat. To je mandatorno, ja.
Seštevanje po modulu pa je okay, ni dvoumnosti, če prav delaš.
Nerdor ::
neoto:
Zanimata me dve stvari glede te tvoje kode:
1. Kje se zapiše "unikatni" ključ? Jest bi ga spravil v neko spremenjivko, mogoče bi uporabil array, da bi se lažje sprehajal skozi for zanko
2. Kje je Decript metoda? Ozr. kako dekriptiranje izvest?
Zanimata me dve stvari glede te tvoje kode:
1. Kje se zapiše "unikatni" ključ? Jest bi ga spravil v neko spremenjivko, mogoče bi uporabil array, da bi se lažje sprehajal skozi for zanko
2. Kje je Decript metoda? Ozr. kako dekriptiranje izvest?
neoto ::
Kodo sem našel tudi na netu: tukaj (google cached)
Drugače pa se za kodiranje in dekodiranje uporablja ista procedura DoXor().
Ne me vprašat, kako to deluje, deluje pač...
Drugače pa se za kodiranje in dekodiranje uporablja ista procedura DoXor().
Ne me vprašat, kako to deluje, deluje pač...
CCfly ::
XOR (nad biti se izvrši logična operacija ekskluzivni ali) je najbolj foo metoda, ki jo lahko najdeš (razen ROT13 seveda).
"My goodness, we forgot generics!" -- Danny Kalev
neoto ::
Ključ je v spremenljivki mstrKey, ki je tipa String. Z Mid(string, start, length) funkcijo v vb-ju, pač prebereš določeni podniz v spremenljivki string, tako da ne potrebuješ ravno array-a.
ccfly: saj vem, kaj je xor operator, samo ne razumem, kaj naredi celotna funkcija DoXor z znaki. Uporablja namreč naključno generirane številke za masko.
ccfly: saj vem, kaj je xor operator, samo ne razumem, kaj naredi celotna funkcija DoXor z znaki. Uporablja namreč naključno generirane številke za masko.
Zgodovina sprememb…
- spremenil: neoto ()
CCfly ::
Aha vidim:
Mid(mstrText, lngN, 1) = Chr(lngC Xor intB)
Mid(mstrText, lngN, 1) = Chr(lngC Xor intB)
"My goodness, we forgot generics!" -- Danny Kalev
gobice ::
Ja sej v VS.NET imaš DES, 3DES, AES itd. že vgrajeno... imports System.Security.Cryptography...
Pa ne vem a sem samo jaz tako nezaupljiv, da bi šel rajš na roke sprogramirat, kot pa MS knjižnice uporabit pri teh zadevah
Pa ne vem a sem samo jaz tako nezaupljiv, da bi šel rajš na roke sprogramirat, kot pa MS knjižnice uporabit pri teh zadevah
Nerdor ::
Asistent za rač. kom. v 3-jem letniku fak. za rač. in infor. je predstavil zbirko knjižnic, ki vsebuejo na navo napisane rutine za DES, 3DES, AES in itd. imenovano The Legion of Bouncy Castle. Napisana je bila za programski jezik Java. Sedaj pa pišejo (beta verzija) za programski jezik C#. Nekako proti utež Ms-ovi System.Security.Cryptography.
gobice ::
Hello. Tokrat eno bolj konkretno vprasanje... ce pred kriptiranjem uporabis "salt" (sol), torej vhodnemu besedilu dodas "random" znake...
Ali se ta sol vedno dodaja na zacetek? Dolzina soli je baje itak javna (what for??).
Ker ce npr. zasoljen text veckrat kriptiras z npr. AES, potem dobis vsakic drugo sifro ven. Ampak dekripcija pa na vseh (razlicnih sifrah istega niza) vrne originalen text. Torej pri dekripciji natanko ves, kaj je sol in kaj ni. Kako to ves?
Tko no, ce je slucajno kdo delu kaj s tem...
Ali se ta sol vedno dodaja na zacetek? Dolzina soli je baje itak javna (what for??).
Ker ce npr. zasoljen text veckrat kriptiras z npr. AES, potem dobis vsakic drugo sifro ven. Ampak dekripcija pa na vseh (razlicnih sifrah istega niza) vrne originalen text. Torej pri dekripciji natanko ves, kaj je sol in kaj ni. Kako to ves?
Tko no, ce je slucajno kdo delu kaj s tem...
snow ::
Če se hoče kdo igrat dekripterja: http://mathschallenge.net/index.php?section=problems&search=true&type=codes
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Hack-It! (strani: 1 2 )Oddelek: Loža | 10956 (3975) | purgovich |
» | Kriptografija in kriptoanalitika (strani: 1 2 )Oddelek: Znanost in tehnologija | 9194 (7285) | [D]emon |
» | Varnost generatorjev naključnih številOddelek: Novice / Varnost | 6287 (6286) | Thomas |
» | Poziv za resevanje resnisnega kriptogramaOddelek: Loža | 1831 (1386) | Brane2 |
» | Skrivanje geselOddelek: Izdelava spletišč | 3157 (2397) | Tr0n |