Notice
Recent Posts
Recent Comments
Link
drexqq
[Java, 자바] 암호화, 복호화(ASCII code) 본문
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
반응형
'공부노트 > 개인공부!' 카테고리의 다른 글
[Java, 자바] baseball(숫자야구).ver2 (0) | 2020.05.29 |
---|---|
[Java, 자바] 성적 통계프로그램.ver3 (0) | 2020.05.28 |
[Java, 자바] 배열의 값 연산하기 (0) | 2020.05.27 |
[Java, 자바] 문자열이 숫자인지 아닌지(isNumber) (0) | 2020.05.27 |
[Java, 자바] 최댓값구하기 (배열) (0) | 2020.05.27 |
Comments