drexqq

[Java, 자바] 암호화, 복호화(ASCII code) 본문

공부노트/개인공부!

[Java, 자바] 암호화, 복호화(ASCII code)

drexqq 2020. 5. 27. 20:47
728x90
반응형

Java로 주어진 배열과 ASCII code를 이용하여 간단한 암호화, 복호화를 할 수 있는 코드를 작성해보았다.

 

코드

package work0527;

public class Exercise6 {

	public static void main(String[] args) {
		/*
		 	다음은 알파벳과 숫자를 아래에 주어진 암호표로 암호화하는 프로그램이다.
		 	
		 	ASCII 97 ~ 122
		 	a b c d e f g h i j k l m n o p q r s t u v w x y z
			` ~ ! @ # $ % ^ & * ( ) - _ + = | [ ] { } ; : , . /
			
			ASCII 48 ~ 57
			0 1 2 3 4 5 6 7 8 9
			q w e r t y u i o p
		 */
//		String abc = "abcdefghijklmnopqrstuvwxyz";
//		String num = "0123456789";
		
//		String str = sc.next();
		
		
		System.out.println("알파벳 원본\t\tabcdefghijklmnopqrstuvwxyz");
		System.out.println("알파벳 암호화\t\t"+encrypt("abcdefghijklmnopqrstuvwxyz"));
		System.out.println("암호화된 알파벳 복호화\t"+decrypt("`~!@#$%^&*()-_+=|[]{};:,./"));
		
		System.out.println();
		System.out.println("숫자 원본\t\t0123456789");
		System.out.println("숫자 암호화\t\t"+encrypt("0123456789"));
		System.out.println("암호화된 숫자 복호화\t"+decrypt("qwertyuiop"));
	}
	
	// 암호화
	static String encrypt(String str) {
		char[] abcCode =	// abcdefghijklmnopqrstuvwxyz
			{ '`', '~', '!', '@', '#', '$', '%', '^', '&', '*',
			'(', ')', '-', '_', '+', '=', '|', '[', ']', '{',
			'}', ';', ':', ',', '.', '/'};
		char[] numCode =	// 0 1 2 3 4 5 6 7 8 9
			{'q','w','e','r','t','y','u','i','o','p'};
		
		
		// 결과값저장할 String 변수 선언
		String secret = "";
		for (int i = 0; i < str.length(); i++) {
			// 파라미터 값으로 받은 문자열을 아스키코드 값으로 치환
			char c = (char) str.charAt(i);
			int chNum = (int) c;
			
			// 받은 문자가 a - z사이라면
			if (chNum >= 97 && chNum <= 122) {
				/*
				 a = 97 ~ z = 122 이기때문에
				 97만큼빼주면 0 ~ 25를 얻을 수 있음
				*/
				chNum = chNum - 97;
				// 암호화를 위한 배열에 해당 위치에 있는 char형으로 바꾼후 String에 합치기
				secret += abcCode[chNum];
			}
			
			// 받은 문자가 0 - 9 사이라면
			else if (chNum >=48 && chNum <=57) {
				/*
				 0 = 48 ~ 9 = 57 이기때문에
				 97만큼빼주면 0 ~ 10를 얻을 수 있음
				*/
				chNum = chNum - 48;
				// 암호화를 위한 배열에 해당 위치에 있는 char형으로 바꾼후 String에 합치기
				secret += numCode[chNum];
			}
			
			else {
				System.out.println("그건못하겠는데요");
			}
		}
		return secret;
	}
			
	
	// 복호화
	static String decrypt(String str) {
		char[] abcCode =	// abcdefghijklmnopqrstuvwxyz
			{ '`', '~', '!', '@', '#', '$', '%', '^', '&', '*',
			'(', ')', '-', '_', '+', '=', '|', '[', ']', '{',
			'}', ';', ':', ',', '.', '/'};
		char[] numCode =	// 0 1 2 3 4 5 6 7 8 9
			{'q','w','e','r','t','y','u','i','o','p'};
		
		// 결과
		String original = "";
		for (int i = 0; i < str.length(); i++) {
			char c = (char) str.charAt(i);
			int chNum = (int) c;
			int index = 0;
			// 복호화할 문자 영어라면 -> 0 - 9로
			if (chNum >= 97 && chNum <= 122) {
				for (int j = 0; j < numCode.length; j++) {
					// 받은 영어와 배열에 있는 영어가 같으면 index값에 j, 즉 배열index값 저장
					if (chNum == (int)numCode[j]) {
						index = j;
						break;
					}
				}
				// 배열index값에 48을 더해서 0 ~ 10 사이의 값 얻기
				index = index+48;
				original += (char)index;
				/*
				 	y(121) == numCode[5]
				 	index = 5
				 	index = 5 + 48
				 	original += (char)53 => (5)
				 */
			}
			
			// 복호화할 문자가 특수문자라면 -> a - z
			else {
				for (int j = 0; j < abcCode.length; j++) {
					// 받은 특수문자와 배열에 있는 특수문자가 같으면 index값에 j, 즉 배열index값 저장
					if (chNum == (int)abcCode[j]) {
						index = j;
						break;
					}
				}
				// 배열index값에 97을 더해서 a ~ z값 얻기
				index = index+97;
				original += (char)index;
				/*
				 	%(37) == abcCode[6]
				 	index = 6
				 	index = 6 + 97
				 	original += (char)103 => (g)
				 */
			}
		}
		return original;
	}
	
}
728x90
반응형
Comments