index


Szyfr permutacji jest bardzo starą formą kryptografii. To pracuje przez przesuwanie listów we wstępnie zdefiniowanym wzorze, tak może zostać stosowany łatwo ręcznie. To również znaczy, że częstości listu plaintext są zachowane.

Klucz pokolenie

To jest szyfr bloku, tak najpierw zdecyduj wielkość bloku chcesz (n), w tym przykładzie użyję 5 listów. Używanie wielkości bloku równej, aż do wiadomość jest równoważne tylko szuraniu wszystkich listów, nie będzie żadnym rozróżnialnym wzorem. Dłużej długość bloku, więcej zabezpiecz wiadomość. Oczywiście nie musisz użyć listów, możesz użyć kawałków. Sam klucz składa się z zamówionego zbioru całości między 1 i n. Losowo zamieniają pary numerów, dopóki nie jesteś zadowolony.

1) 1 2 3 4 5

2) 5 2 3 4 1

3) 2 5 3 4 1

4) 2 5 1 4 3

5) 2 4 1 5 3

Teraz użyję 5 jako klucz, ponieważ to wygląda wystarczająco przypadkowy, tak pozwala dostać się do stosowania tego.

Szyfrując

Wiadomość:

LOREM IPSUM DOLOR SITAM ETCON SECTE TUERA DIPIS CINGE LITXX

Teraz w każdym bloku, odnośnie-zaplanuję to w porządek pokazanym w kluczu, więc pierwszy element w ciphertext jest 2. elementem od plaintext. To znaczy ciphertext odpowiedni do mojej wiadomości i klucz jest:

OELMR PUIMS OODRL IASMT TOENC ETSEC URTAE IIDSP IGCEN IXLXT

Jak widać sekret wiadomości nie jest błyskotliwy, jakieś rzeczy będą łatwe, by zauważyć z miejsca. Z powodu masywnych zwolnienia grupowego w ludzkim języku to jest czasami możliwe rozbić szyfr tylko przez czytanie tego.

Odcyfrowując.

Aby odwrócić proces, który musisz, by znaleźć odwrotny klucz; to jest klucz, który wraca, permutacja, którą normalny klucz tworzy. Wartość elementu jest pozycją tego elementu w kluczu. W tym przypadku, klucz jest:

[2, 4, 1, 5, 3]

I odwrotny jest:

[3, 1, 5, 2, 4]

Kod.

Jeżeli chcesz spróbować ten szyfr z sobą, tu jest wprowadzenie pytona, do którego ja napisany przyspieszam tę recenzję:

def decrypt(cipher, ciphertext):

return encrypt(inverse_key(cipher), ciphertext)

def encrypt(cipher, plaintext):

plaintext = "".join(plaintext.split(" ")).upper()

ciphertext = ""

for pad in range(0, len(plaintext)%len(cipher)*-1%len(cipher)):

plaintext += "X"

for offset in range(0, len(plaintext), len(cipher)):

for element in [a-1 for a in cipher]:

ciphertext += plaintext[offset+element]

ciphertext += " "

return ciphertext[:-1]

def inverse_key(cipher):

inverse = []

for position in range(min(cipher),max(cipher)+1,1):

inverse.append(cipher.index(position)+1)

return inverse

To encrypt, run:

cipher = [2,4,1,5,3]

plaintext = "LOREM IPSUM DOLOR SITAM ETCON SECTE TUERA DIPIS CINGE LITXX"

ciphertext = encrypt(cipher, plaintext)

Odszyfruj:

To encrypt, run:

cipher = [2,4,1,5,3]

ciphertext = "OELMR PUIMS OODRL IASMT TOENC ETSEC URTAE IIDSP IGCEN IXLXT"

plaintext = decrypt(cipher, ciphertext)

Simple enough, eh?

Skazy.

Bestia zmuszająca to jest bardzo łatwa. Przykład wygenerowuje każde połączenie klucza i odnosi się do ciphertext, wtedy spoglądając dla "", "TH", "ON" lub inne trój znaki / bigramy wspólne w języku źródłowym.

Jako poprzednio określony, czasami to jest możliwe dla człowieka, by rozbić szyfrowanie tylko około patrzące na to, ponieważ każdy list angielskiego języka ma WIELE zwolnienia grupowego.

Ponadto sznur musi zostać wyściełany. Użyłem "X" który jest dość oczywisty. To pozwoli ludziom, by zobaczyć jak długo jest plaintext sznur. Inny problem jest ciphertext długością zawsze będzie wielokrotnością długości bloku.



Wyszukiwarka

Podobne podstrony:
Human Development Index
Diet, Weight Loss and the Glycemic Index
Negative Volume Index, giełda(3)
Mass Index, giełda(3)
index
index (4)
index reg p0 p9
index
index
EWD Index
LMA Geographical Index
happy planet index report
Directional Movement Index, giełda(3)
index najwazniejszych utworow antyk, Wypracowania, sciagi i inne - szkola, Jezyk polski
Zdjęcia index
@Index (2)
index
Książka o rozbudowie komputera-Index, wrzut na chomika listopad, Informatyka -all, INFORMATYKA-all,
Index
strona ~$index

więcej podobnych podstron