Взлом Ceasar cipher — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (Полезные ссылки)
м
Строка 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/ - перебор русской раскладки шифра цезаря