일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- chatGPT's answer
- 코틀린
- android
- 웹 크롤링
- write by GPT-4
- 파이썬
- 고전역학
- 자바
- oracle
- kotlin
- 데이터베이스
- 리눅스
- 자바암호
- Java
- python
- GPT-4's answer
- flet
- 인프라
- jpa
- spring data jpa
- Database
- NIO
- spring integration
- write by chatGPT
- 유닉스
- 역학
- 시스템
- 자바네트워크
- 소프트웨어공학
- JVM
- Today
- Total
기억을 지배하는 기록
자바을 이용한 암호학 - 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]))); } } |
'오래된글 > 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 |