Взлом Ceasar cipher — различия между версиями
Материал из InformationSecurity WIKI
Drakylar (обсуждение | вклад) м (→Полезные ссылки) |
Drakylar (обсуждение | вклад) м |
||
Строка 1: | Строка 1: | ||
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. | Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. | ||
− | = | + | |
+ | =Где часто используется= | ||
+ | |||
+ | =Скрипты= | ||
+ | |||
+ | ==python== | ||
Взлом данного шифра происходит методом перебора всех возможных сдвигов. Для этого можно использовать инструмент [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript Automatic Caesar cipher breaker] либо код на python, в котором строка '''Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj''' является зашифрованной: | Взлом данного шифра происходит методом перебора всех возможных сдвигов. Для этого можно использовать инструмент [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript Automatic Caesar cipher breaker] либо код на python, в котором строка '''Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj''' является зашифрованной: | ||
− | + | <syntaxhighlight lang="python" line> | |
a = 'Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj' | a = 'Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj' | ||
import string | import string | ||
Строка 11: | Строка 16: | ||
for n in xrange(26): | for n in xrange(26): | ||
a.translate(rotn(n)) | a.translate(rotn(n)) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==perl== | ||
+ | <syntaxhighlight lang="perl" line> | ||
+ | use 5.010; | ||
+ | use warnings; | ||
+ | |||
+ | my $original = lc "Ceterum censeo Carthaginem esse delendam"; | ||
+ | |||
+ | my $cyphered = $original; | ||
+ | $cyphered =~ tr/a-z/k-za-j/; | ||
+ | say $cyphered; | ||
+ | |||
+ | my $decyphered = $cyphered; | ||
+ | $decyphered =~ tr/k-za-j/a-z/; | ||
+ | say $decyphered; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==ruby== | ||
+ | <syntaxhighlight lang="ruby" line> | ||
+ | class Caesar | ||
+ | def initialize(shift, alphabet = ('a'..'z').to_a.join) | ||
+ | i = shift % alphabet.size #I like this | ||
+ | @decrypt = alphabet | ||
+ | @encrypt = alphabet[i..-1] + alphabet[0...i] | ||
+ | end | ||
+ | |||
+ | def encrypt(string) | ||
+ | string.tr(@decrypt, @encrypt) | ||
+ | end | ||
+ | |||
+ | def decrypt(string) | ||
+ | string.tr(@encrypt, @decrypt) | ||
+ | end | ||
+ | end | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==java== | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | |||
+ | private final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; | ||
+ | public String encrypt(String plainText,int shiftKey) | ||
+ | { | ||
+ | plainText = plainText.toLowerCase(); | ||
+ | String cipherText=""; | ||
+ | for(int i=0;i<plainText.length();i++) | ||
+ | { | ||
+ | int charPosition = ALPHABET.indexOf(plainText.charAt(i)); | ||
+ | int keyVal = (shiftKey+charPosition)%26; | ||
+ | char replaceVal = this.ALPHABET.charAt(keyVal); | ||
+ | cipherText += replaceVal; | ||
+ | } | ||
+ | return cipherText; | ||
+ | } | ||
+ | public String decrypt(String cipherText, int shiftKey) | ||
+ | { | ||
+ | cipherText = cipherText.toLowerCase(); | ||
+ | String plainText=""; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =Утилиты= | ||
+ | |||
+ | |||
+ | |||
+ | =Райтапы= | ||
+ | |||
Версия 12:03, 2 июня 2016
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.
Содержание
Где часто используется
Скрипты
python
Взлом данного шифра происходит методом перебора всех возможных сдвигов. Для этого можно использовать инструмент Automatic Caesar cipher breaker либо код на python, в котором строка Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj является зашифрованной:
1 a = 'Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj'
2 import string
3 def rotn(n):
4 from string import ascii_lowercase as lc, ascii_uppercase as uc
5 mapping = string.maketrans(lc + uc, lc[n:] + lc[:n] + uc[n:] + uc[:n])
6 return mapping
7 for n in xrange(26):
8 a.translate(rotn(n))
perl
1 use 5.010;
2 use warnings;
3
4 my $original = lc "Ceterum censeo Carthaginem esse delendam";
5
6 my $cyphered = $original;
7 $cyphered =~ tr/a-z/k-za-j/;
8 say $cyphered;
9
10 my $decyphered = $cyphered;
11 $decyphered =~ tr/k-za-j/a-z/;
12 say $decyphered;
ruby
1 class Caesar
2 def initialize(shift, alphabet = ('a'..'z').to_a.join)
3 i = shift % alphabet.size #I like this
4 @decrypt = alphabet
5 @encrypt = alphabet[i..-1] + alphabet[0...i]
6 end
7
8 def encrypt(string)
9 string.tr(@decrypt, @encrypt)
10 end
11
12 def decrypt(string)
13 string.tr(@encrypt, @decrypt)
14 end
15 end
java
1 private final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
2 public String encrypt(String plainText,int shiftKey)
3 {
4 plainText = plainText.toLowerCase();
5 String cipherText="";
6 for(int i=0;i<plainText.length();i++)
7 {
8 int charPosition = ALPHABET.indexOf(plainText.charAt(i));
9 int keyVal = (shiftKey+charPosition)%26;
10 char replaceVal = this.ALPHABET.charAt(keyVal);
11 cipherText += replaceVal;
12 }
13 return cipherText;
14 }
15 public String decrypt(String cipherText, int shiftKey)
16 {
17 cipherText = cipherText.toLowerCase();
18 String plainText="";
19 }
Утилиты
Райтапы
Полезные ссылки
http://planetcalc.com/1434/ - перебор английской раскладки шифра цезаря
http://planetcalc.ru/1434/ - перебор русской раскладки шифра цезаря