본문 바로가기

Programming/JAVA

[JAVA] Ceaser cipher

고전암호인 시저암호는 알파벳을 키 값만큼 평행이동 시킴으로써 암호화하는 알고리즘이다.

 

키 값이 3이면 다음과 같이 이동하여 암호화된다.

복호화는 거꾸로 올라가면 되는 단순한 암호화 방식이다.

 

 

 

 

//Ceasar cipher

import java.util.Scanner;

public class Main {
	//A~Z -> 65~90
    static Scanner scan = new Scanner(System.in);
    
	//암호화
	public static void Encryption(String plain_text, int key) {
		char plain_arr[] = plain_text.toCharArray();
		char cipher_arr[] = new char[plain_text.length()];
		int cipher;
                
		for(int i=0; i< plain_text.length(); i++){
			cipher = plain_arr[i] + key;
			if (cipher > 90) cipher_arr[i] = (char)(cipher-26);
			else cipher_arr[i] = (char)cipher;
		}
		String cipher_text = String.valueOf(cipher_arr);
		System.out.println(cipher_text);
	}
    	//복호화
	public static void Decryption(String cipher_text, int key) {
		char cipher_arr[] = cipher_text.toCharArray();
		char plain_arr[] = new char[cipher_text.length()];
		int plain;
				
		for(int i=0; i< cipher_text.length(); i++){
			plain = cipher_arr[i] - key;
			if (plain < 65) plain_arr[i] = (char)(plain+26);
			else plain_arr[i] = (char)plain;
		}
		String plain_text = String.valueOf(plain_arr);
		System.out.println(plain_text);
	}

	public static void main(String[] args) {
		while(true) {
			System.out.print("Encryption is E or Decryption id D : ");
			String fac = scan.nextLine();
			fac = fac.toUpperCase();
			if (!fac.equals("E") && !fac.equals("D")) {
				System.out.println("Please Again");
				continue;
			}
			System.out.print("key(number) : ");
			int key = Integer.parseInt(scan.nextLine());
			System.out.print("text : ");
			String text = scan.nextLine();
			text = text.toUpperCase();
			if (fac.equals("E")) Encryption(text, key);
			else if (fac.equals("D")) Decryption(text, key);
			break;
		}
	}
}

 

 

 

'Programming > JAVA' 카테고리의 다른 글

[JAVA] 단일 치환 암호  (0) 2020.04.25
[JAVA] Ceaser cipher  (0) 2020.04.25