Взлом Ceasar cipher

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.

Чем выделяется

Где часто используется

Используется только на CTF в тасках. Так как шифр Цезаря один из самых древних, то обычно в описании заданий присутствуют на это намеки.

Скрипты

python

  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. }

Утилиты

Automatic Caesar cipher breaker

CrypTool

Райтапы

CSAW CTF 2015 - Forensics 100 Transfer Writeup

Caesar - 20 (Cryptography)

Krypton Level 2 Writeup

Nullcon CTF HackIM 2016 - Crypto 2 400 pts WriteUp

Полезные ссылки

http://planetcalc.com/1434/ - перебор английской раскладки шифра цезаря

http://planetcalc.ru/1434/ - перебор русской раскладки шифра цезаря

http://www.xarg.org/tools/caesar-cipher/ - енкодер/декодер шифра цезаря

https://ru.wikipedia.org/wiki/Шифр_Цезаря - официальная вики страница