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

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...