Akashic Records

자바을 이용한 암호학 - 1 본문

오래된글/Java

자바을 이용한 암호학 - 1

Andrew's Akashic Records 2018. 4. 7. 23:20
728x90

Cryptology with Java

Version 1.10


Cipher와 Code

암호(cipher) : 일반적으로 고정된 길이의 단위를 특정 아이템을 암호화하는 방법을 제공하는 수학적 함수를 사용하여 변환한다. 그리고 암호는 실질적으로 메시지에 사용되는 언어와 독립적으로 사용할 수 있다.

코드(code) : 단어들에서 단어들로 가는 함수로서, 메시지에 사용되어진 언어와 종속적이다. 예를 들어 코드북은 수학적 변환을 설명하는 것이 아니라, 각각의 단어들이 어떻게 대응되는지를 일일이 적어 놓은 것이다.


Caesar 암호화

가장 오래된 암호화 방법이다. 암호화 함수와 복호화 함수는 개개의 문자들을 같은 알파벳 안에서 다른 문자들로 변환 대응시킨 것이다.


빈도 분석법을 이용한 Caesar 복호화

1. 메시지는 영문이라고 가정한다.

2. 영문에서 가장 많이 나오는 문자는 “E”이다.

3. 가능한 많은 암호문을 조사하여 가장 많은 빈도의 문자는 “E”이다.

4. “E”와 암호화된 문자 사이의 거리가 변환값이다.

CeasarMain.java

package com.crypto;

public class CaesarMain {

public CaesarMain() {

}

private int defaultKey = -3;

public String Encrypt(String s) {

return Encrypt(s, defaultKey);

}

public String Decrypt(String s) {

return Decrypt(s, defaultKey);

}

public String Encrypt(String s, int key) {

String rtn = "";

try{

byte[] cc = s.getBytes();

for(int i=0; i< cc.length; i++){

cc[i] = (byte)(cc[i]-key);

}

rtn = new String(cc);

}catch(Exception e){

e.printStackTrace();

}

return rtn;

}

public String Decrypt(String s, int key){

String rtn = "";

try{

byte[] cc = s.getBytes();

for(int i=0; i< cc.length; i++){

cc[i] = (byte)(cc[i]+key);

}

rtn = new String(cc);

}catch(Exception e){

e.printStackTrace();

}

return rtn;

}

public static void main(String[] args) {

CaesarMain caesar = new CaesarMain();

if(args.length < 1) {

System.out.println("USE : java CaesarMain [Text]");

System.exit(0);

}

System.out.print("--> Original Text : ");

System.out.println(args[0]);

System.out.print("--> Encrypt Text : ");

System.out.println(caesar.Encrypt(args[0]));

System.out.print("--> Dencrypt Text : ");

System.out.println(caesar.Decrypt(caesar.Encrypt(args[0])));

}

}



728x90

'오래된글 > Java' 카테고리의 다른 글

자바을 이용한 암호학 - 3  (0) 2018.04.07
자바을 이용한 암호학 - 2  (0) 2018.04.07
Java HotSpot VM Options  (0) 2018.04.07
Java 8 Date/Time API  (0) 2018.04.07
Avoid J2EE data layer bottlenecks  (0) 2018.04.07
Comments