2011년 6월 13일 월요일

자바을 이용한 암호학(자바보안 개정판) - 1

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])));
}
}

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...