Member 14046337 Ответов: 3

Шифрование и расшифровка строки


Я хочу зашифровать и расшифровать строку, содержащую алфавиты от A до Z, используя java
Шифрование:-Например, у меня есть строка из A-Z, и пользователь дает A в качестве входного сигнала, то выход должен быть 1 таким образом, если пользователь вводит B, то выход должен быть 2 и вскоре до Z.

Расшифровка:-Например, у меня есть строка из A-Z, и пользователь дает 1 в качестве входного сигнала, то выход должен быть A таким образом, если пользователь вводит 2, то выход должен быть B и вскоре до Z.

я был в состоянии решить расшифровку, но я не в состоянии решить шифрование.пожалуйста, помните при ответе, что я новичок и хочу написать программу шифрования и дешифрования только в одной программе.

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

import java.util.Scanner;
import java.lang.String;
public class Decrypt {

		public static void main(String[] args){
			
			Scanner sc=new Scanner(System.in);
		    String s1 = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		   int n = sc.nextInt();
		    char ch = s1.charAt(n);
		    
		    System.out.println(ch);
		   
	            }  
	         
	        }

CPallini

Я вижу проблему в вашей логике шифрования/дешифрования. Например, по шифрованию K->11.
Тогда, при расшифровке, 11->K или 11->AA ?

MadMyche

Ницца

Member 14046337

я хочу расшифровку 11 - К и шифрование к-11.

CPallini

Вы должны поместить разделители (например, пробелы) в зашифрованную строку, иначе расшифровка будет невозможна из-за таких двусмысленностей. Или, возможно, ваша зашифрованная информация представляет собой массив целых чисел?

MadMyche

(подсказка) таким образом, в основном вы просто хотите получить значение ASCII и вычесть 64 для "шифрования" (sic)

3 Ответов

Рейтинг:
23

Richard MacCutchan

String ss = sc.next();    // get the next token
ss = s.toUpperCase();     // convert to upper case
for (int i = 0; i < ss.length(); ++i)  // for each character in the token
{
    char c = ss.charAt(i);
    System.out.print("Letter is: " + c);          // display the character
    int val = c - 'A' + 1;                        // get its numeric value
    System.out.println(" , Value is: " + val);    // display the value
}

Обратите внимание, что это требует добавления проверок ошибок, чтобы гарантировать, что каждый символ является только алфавитным.


CPallini

Такое шифрование было бы неразрешимым, если бы вы не ставили разделители между сгенерированными целыми числами.

Richard MacCutchan

Я знаю, но это ответ на вопрос.

CPallini

Я вижу. Теперь я задаюсь вопросом, как ОП "смог решить расшифровку".

Richard MacCutchan

Это не расшифровка (или шифрование), это подмена.

Member 14046337

СС=С. метод touppercase();.Здесь показывает некоторые ошибки.

Richard MacCutchan

Опечатка, очевидно, должна быть ss=сс.метод touppercase();

Richard MacCutchan

И напоминание ...
Когда вы получаете ошибки в своем коде и хотите сообщить о них нам, не просто говорите "некоторые ошибки". Покажите нам точное сообщение, которое вы видите. Хотя в данном случае проблема была очевидна.

Member 14046337

Сэр, последнее сомнение, почему мы пишем int val = c - 'A' + 1; и, наконец, сообщество проектов кода лучше, чем переполнение стеков.

Richard MacCutchan

Символ-это просто байт с числовым значением, каждый буквенный символ на 1 больше предыдущего. Символ A имеет значение x41, или 65 десятичных знаков, B-66 и т. д. Таким образом, если вы вычтете " а " (65) из любого введенного символа, вы получите его индексное значение в алфавите. Но в этом случае " а " будет равно нулю, поэтому мы добавляем единицу, чтобы сделать его списком на основе 1.

Рейтинг:
2

OriginalGriff

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

Это незначительная вариация шифра Цезаря: и вы найдете много, много примеров того, что реализовано практически на каждом языке: Caesar Cypher java - поиск в Google[^] предлагает 68 000 просмотров.

Но имейте в виду, что шифр Цезаря не является "настоящим шифром" и совсем не безопасен - они публикуют целые журналы, полные их (обычно называемые "взломщиками кодов" или подобными) каждый месяц, поэтому действительно скучающие люди могут решать их в свободное время, вместо того чтобы смотреть Джереми Кайла или еще одно гнилое игровое шоу...


Рейтинг:
2

Member 14046337

Спасибо Вам за вашу помощь.Это даже лучше, чем переполнение стека

import java.util.Scanner;
public class Encrypt {

		public static void main(String[] args){
			Scanner sc=new Scanner(System.in);
		    String s1 = " ABCDEFGHIJKLMNOPQRST";
		     int n = sc.nextInt();
		    char ch = s1.charAt(n);
		    
		    System.out.println(ch);
		
		    
	String ss = sc.next();    // get the next token

ss = ss.toUpperCase();     // convert to upper case
for (int i = 0; i < ss.length(); ++i)  // for each character in the token
{
    char c = ss.charAt(i);
    System.out.print("Letter is: " + c);          // display the character
    int val = c - 'A' + 1;                        // get its numeric value
    System.out.println(" , Value is: " + val);    // display the value
}}}


Evrim Tekin

Привет