01/10/2018, 00:27

Hướng giải quyết cho bài toán cipher encryption

Mình đang học java và đang bế tắc vs bài tập này. Mong mọi người định hướng cách giải quyết vấn đề này:
Caesar cipher is a substitution cipher method which was used by Julius Caesar to protect
private information from the enemies. By replace each letter in the original letter with a letter
some fixed positions down the alphabet, the result is meaningless to anyone who doesn’t
know the secret.
Write a program that apply Caesar cipher on a message taken from user and print the
result. Assuming all input letters are lower case. The letters shift are provided as below.
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Cipher: DEFGHIJKLMNOPQRSTUVWXYZABC
E.g. Original message: hello world
Encrypted message: khoor zruog

anon10499953 viết 02:37 ngày 01/10/2018

Cơ bản như sau:
index = 1 -> A
index = 2 -> B
index = 3 -> C

Theo input thì A sẽ được chuyển thành D, tức là chỉ số index được cộng thêm cho 3. Bảng ký tự alphabet có 26 ký tự, cho nên khi index + 3 > 26 thì quay ngược trở về đầu bảng.

index_của_ký_tự_được_mã_hóa = (index_của_ký_tự_ban_đầu + 3) % 26

P.s Cần lưu ý trường hợp (23 + 3) % 26, công thức tổng quát nhất là:

index_của_ký_tự_được_mã_hóa = 1 + (index_của_ký_tự_ban_đầu + 3 - 1) % 26

Bùi Minh Phúc viết 02:33 ngày 01/10/2018

Vì đề bài yêu cầu chỉ nhập vào chữ thường nên bạn dùng hàm lấy mã ASCII của từng kí tự, tính toán với cái mã đó, rồi đổi kết quả vừa tính được thành kí tự để xuất ra.

Khoảng cách giữa kí tự plain với kí tự được mã hóa gọi là độ dời. Trong bài này thấy từ ‘h’ dịch lên 3 đơn vị thành ‘k’ thì độ dời là 3.

Gửi bạn cái demo để tham khảo.

Thành Nguyễn viết 02:39 ngày 01/10/2018

tks b nhé

Thành Nguyễn viết 02:43 ngày 01/10/2018

Khi mình nhập vào dấu cách thì nó ra chữ c . làm sao để xử lý vấn đề này vậy b?

public static void main(String[] args) {
    System.out.println("Enter your message: ");
    Scanner inp = new Scanner(System.in);
    final String alpha = " abcdefghijklmnopqrstuvwxyz"; 
    String str = inp.nextLine();   //the string user input           
    String ans = "";     //the encrypted output string
    int ind1; int ind2;  //the index of str and ans strings
    char x;              //the character followed by ind2 in ans string
    int i = 0;
    while (i < str.length()) {
        ind1 =alpha.indexOf(str.charAt(i)); //index of str with i variable 
        ind2 = 1+ (ind1 + 3-1)%26;              //using ind1 to count ind2
        i++;            
        x = alpha.charAt(ind2);             
        ans = ans +x;            
    }
           System.out.println(ans);
              
}

}

Quân viết 02:42 ngày 01/10/2018

check nếu không phải là kí tự chữ cái thì k mã hóa và giải mã char đó thôi

Thành Nguyễn viết 02:42 ngày 01/10/2018

tks b nhé

Bài liên quan
0