2016-02-15 3 views
0

Для моего класса CPSC мне нужно сделать код шифрования, используя цезарский шифр. Это сделано. Следующая часть принимает зашифрованное сообщение и циклически добавляет секретный ключ к зашифрованному сообщению. Например, если я шифрую «Привет!» используя сдвиг 13, он превратится в «Урыбы!». Затем я должен сдвинуть «U» на один, «r» на три, «y» на один и т. Д., Который войдет в «Vuzbc!». Я нахожусь в классе новичков, поэтому не знаю всех крутых советов и трюков. Единственное возможное решение, которое я знаю, - это взять результат цезарного шифра и как-то проиндексировать секретный ключ, который будет добавлен к результату.Что лучше всего подходит для шифрования шифрования?

Вот мой код, который я до сих пор:

public class Cipher { 

private int secretKey; 
private int superSecretKey; 


public static void main(String [] args) 
{ 
    Cipher cipher = new Cipher(1); 
} 

public Cipher(int myKey) { 
    secretKey = myKey; 
} 


public String caesarEncrpyt (String s) { 
    String r = ""; 

    for(int i = 0; i < s.length(); i++) { 

     char c = (char) (s.charAt(i)); 
     if(Character.isLetter(c)) { 
      if (Character.isUpperCase(c)) { 
       r += (char) ('A' + (c - 'A' + secretKey) % 26); 
      } 
      else { 
       r += (char) ('a' + (c - 'a' + secretKey) % 26); 
      } 
     } 
      else { 
      r += c; 
     } 
    } 
    return r; 
} 

public String caesarDecrypt (String s) { 
    String r = ""; 

    for(int i = 0; i < s.length(); i++) { 

     char c = (char) (s.charAt(i)); 
     if(Character.isLetter(c)) { 
      if (Character.isUpperCase(c)) { 
       r += (char) ('A' + (c - 'A' - secretKey) % 26); 
      } 
      else { 
       r += (char) ('a' + (c - 'a' - secretKey) % 26); 
      } 
     } 
      else { 
      r += c; 
     } 
    } 
    return r; 
} 

public String augustusEncrypt (String s) { 
    String r = ""; 

    for(int i = 0; i < s.length(); i++) { 

     char c = (char) (s.charAt(i)); 
     if(Character.isLetter(c)) { 
      if (Character.isUpperCase(c)) { 
       r += (char) ('A' + (c - 'A' + secretKey) % 26); 
      } 
      else { 
       r += (char) ('a' + (c - 'a' + secretKey) % 26); 
      } 
     } 
      else { 
      r += c; 
     } 
    } 
    return r; 
} 

augustusEncrypt является копирование и вставка из caesarEncrypt. Я собирал кое-что, надеясь на решение. Заранее спасибо!

Редактировать: Возможно, я не объяснил это правильно, если у вас есть вопрос, я буду здесь.

+0

В общем, шифровании зашифрованного текста является плохой практикой. Это вряд ли сделает что-то более безопасным, и в зависимости от используемых систем может на самом деле сделать вещи слабее. (очевидно, это не проблема в этом конкретном случае, хотя, очевидно, нет ничего более безопасного в этом двойном шифровании) –

+0

Когда вы говорите «циклический секретный ключ», вы имеете в виду, что, поскольку ключ был 13, вы собираетесь превратить это в {1, 3}, и если ключ был 482213, цикл будет {4,8,2,2,1,3}? –

+0

Трудно объяснить. Если бы мне было секретно, мне было 13, и мне пришлось вращать «Привет!». Я бы добавил 1 к H, затем 3 к e. Затем вернитесь к 1, чтобы добавить к L. –

ответ

0

Напишите функцию, назовите ее toDigits, которая примет int (или длинную) и вернет массив из целых чисел, соответствующих цифрам ввода. to toDigits (13) => {1,3} и toDigits (4834) => {4,8,3,4} и т. д.

Затем введите функцию encryptChar, взяв char и int и зашифровав символ тем, что int. (encryptChar ('e', 1) => 'f', encryptChar ('a', 28) => c и т. д.)

Затем вы можете перебрать символы сообщения и цифры в этом массиве, передавая значения encryptChar и используя результаты для сборки вашего зашифрованного сообщения. В рыхлом роде псевдокод:

fn encryptMessage(message, key): 
    key_array = toDigits(key) 
    output = "" 
    for i in length (message): 
    output.append(encryptChar(message[i], key_array[i % length(key_array)])) 
0

Лучшие практики и конвенция для шифрования в стороне, решение очень простые.

У вас есть буквы A-Z и a-z, которые уже выполняют правильный цикл, когда мы отступаем от алфавита, и вы считаете, что работаете правильно. Все, что вам нужно сделать, это добавить 1 до.

Было бы что-то вроде этого (предупреждения: непроверенное):

('A' + ((c+1) - 'A' + secretKey) % 26) 
Смежные вопросы