Member 14636305 Ответов: 2

Шифрование работает, а дешифрование не работает


import java.io.BufferedReader;

import java.io.InputStreamReader;
import java.util.Scanner;
public class Ceasercipher
{
static Scanner sc=new Scanner(System.in);
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
public static void main(String args[]) throws Exception
{
System.out.println("Enter the String");
String str=br.readLine();
System.out.println("/n Enter the key");
int key=sc.nextInt();
String encrypted=encrypt(str,key);
System.out.println("/n encrypted string"+encrypted);
String decrypted=decrypt(encrypted,key);
System.out.println("/n decrypted string"+decrypted);
System.out.println("/n");
}
public static String encrypt(String str, int key)
{
String encrypted=" ";
for (int i=0;i<str.length();i++)
{
int c="str.charAt(i);
if(Character.isUpperCase(c))
{
c=c+(key%26);
if(c">'Z')
c=c-26;
}
else if(Character.isLowerCase(c))
{
c=c+(key%26);
if(c>'z')
c=c-26;
}
encrypted+=(char)c;
}
return encrypted;
}
public static String decrypt(String encrypted,int key)
{
String decrypted=" ";
for (int i=0;i<encrypted.length();i++)
{
int c="encrypted.charAt(i);
if(Character.isUpperCase(c))
{
c=c-(key%26);
if(c">'A')
c=c+26;
}
else if(Character.isLowerCase(c))
{
c=c-(key%26);
if(c<'a')
c=c+26;
}
decrypted+=(char)c;
}
return decrypted;
}
}


Что я уже пробовал:

я пытаюсь зашифровать и расшифровать строку

2 Ответов

Рейтинг:
1

OriginalGriff

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

Например, если вы сделали отступ в коде, вы увидите ложные двойные кавычки в коде, которые эффективно "комментируют" куски вашего кода:

int c="str.charAt(i);
if(Character.isUpperCase(c))
{
c=c+(key%26);
if(c">'Z')
c=c-26;
}

Во-вторых, откуда вы знаете, что "шифрование работает, а дешифрование не работает"? Как вы это проверили? Или вы предположили, что поскольку шифрование генерирует трудночитаемые выходные данные, оно должно быть правильным?

В-третьих, это не шифрование: это перевод; вариант шифра Цезаря, который может быть "взломан" в считанные минуты почти любым человеком. Черт возьми, они выпускают целые журналы каждый месяц, так что маленькие старушки могут делать это для удовольствия ...

Поэтому начните с небольшой известной строки: "ABCDEF" и вручную переведите ее. Затем расшифруйте его вручную. Попробуйте его с различными "ключевыми" значениями. Когда это создаст ту же строку, что и оригинал, затем запустите ту же строку через свой метод "шифрования". Сравнить результаты. Являются ли они абсолютно идентичными? Если это так, то шифрование, возможно, в порядке. Если нет, то почему? Чем они отличаются друг от друга?

Когда это правильно, запустите свою зашифрованную вручную строку с помощью метода "дешифрования". Вы получаете оригинал обратно? Если это так, попробуйте использовать оба метода вместе. Если нет, то почему бы и нет?

Если все это работает, запустите строку через шифрование, затем вставьте результат в расшифровку и сравните выходные данные с исходными входными данными. Если они одинаковы, повторите попытку с более длинными и сложными строками. Если нет, то почему?

Всякий раз, когда вы достигаете "почему бы и нет?" дотянитесь до отладчика и начните использовать его, чтобы посмотреть, что именно делает ваш код во время выполнения. Пора вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

phil.o

Попробуйте заменить

if(c > 'A')
с
if(c < 'A')
Вы должны стремиться к обучению отладке, с ее помощью вы бы сами обнаружили проблему за гораздо меньшее время, чем публикация и ожидание ответа.