고전암호인 시저암호는 알파벳을 키 값만큼 평행이동 시킴으로써 암호화하는 알고리즘이다.
키 값이 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 |