BBS > java

Triple DES & DES JAVA ,C

작성자 : 이창우 (x1wins) | 등록일 : 2011-12-26 | 목록
첨부 파일이 없습니다.
첨부 이미지가 없습니다.
package net.changwoo.util;

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;

public class DES {

    public static void main(String[] args) throws Exception {
        String text = "java12345";

        String enen = encrypt(text);
        String dede = decrypt(enen);

        System.out.println("\nOrigin key: " + key());
        System.out.println("\nOrigin text: " + text);
        System.out.println("\nEncrypted text: " + enen);
        System.out.println("\nDecrypted text: " + dede);
    }
    
    /**
     * 고정키 정보
     * @return
     */
    public static String key()
    {
//        return "ab_booktv_abcd09";
        return "ab_booktv_abcd0912345678";
    }
    
    /**
     * 키값
     * 24바이트인 경우 TripleDES 아니면 DES
     * @return
     * @throws Exception
     */
    public static Key getKey() throws Exception {
        return (key().length() == 24) ? getKey2(key()) : getKey1(key());
    }

    /**
     * 지정된 비밀키를 가지고 오는 메서드 (DES)
     * require Key Size : 16 bytes
     *
     * @return Key 비밀키 클래스
     * @exception Exception
     */
    public static Key getKey1(String keyValue) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(keyValue.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        Key key = keyFactory.generateSecret(desKeySpec);
        return key;
    }
    
    /**
     * 지정된 비밀키를 가지고 오는 메서드 (TripleDES)
     * require Key Size : 24 bytes
     * @return
     * @throws Exception
     */
    public static Key getKey2(String keyValue) throws Exception {
        DESedeKeySpec desKeySpec = new DESedeKeySpec(keyValue.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        Key key = keyFactory.generateSecret(desKeySpec);
        return key;
    }

    /**
     * 문자열 대칭 암호화
     *
     * @param ID
     *            비밀키 암호화를 희망하는 문자열
     * @return String 암호화된 ID
     * @exception Exception
     */
    public static String encrypt(String ID) throws Exception {
        if (ID == null || ID.length() == 0)
            return "";
        
        String instance = (key().length() == 24) ? "DESede/ECB/PKCS5Padding" : "DES/ECB/PKCS5Padding";
        javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(instance);
        cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, getKey());
        String amalgam = ID;

        byte[] inputBytes1 = amalgam.getBytes("UTF8");
        byte[] outputBytes1 = cipher.doFinal(inputBytes1);
        sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
        String outputStr1 = encoder.encode(outputBytes1);
        return outputStr1;
    }

    /**
     * 문자열 대칭 복호화
     *
     * @param codedID
     *            비밀키 복호화를 희망하는 문자열
     * @return String 복호화된 ID
     * @exception Exception
     */
    public static String decrypt(String codedID) throws Exception {
        if (codedID == null || codedID.length() == 0)
            return "";
        
        String instance = (key().length() == 24) ? "DESede/ECB/PKCS5Padding" : "DES/ECB/PKCS5Padding";
        javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(instance);
        cipher.init(javax.crypto.Cipher.DECRYPT_MODE, getKey());
        sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();

        byte[] inputBytes1 = decoder.decodeBuffer(codedID);
        byte[] outputBytes2 = cipher.doFinal(inputBytes1);

        String strResult = new String(outputBytes2, "UTF8");
        return strResult;
    }

}
키가 24바이트(24글자)이면 triple DES이고 아니면 DES라는군....


24바이트 결과
key = ab_booktv_abcd0912345678
Origin key: ab_booktv_abcd0912345678
Origin text: java12345
Encrypted text: fpzJxj5JEEEHob9UclJYbQ==
Decrypted text: java12345


desc 결과
key = ab_booktv_abcd09
Origin key: ab_booktv_abcd09
Origin text: java12345
Encrypted text: 3nAuFnFNtxDWBHOqueEpdA==
Decrypted text: java12345



그리고 C 풀 소스는 여기에 (안됨)
http://blog.naver.com/PostView.nhn?blogId=pill7575&logNo=70024163901&redirect=Dlog&widgetTypeCall=true


맥부기 제공
http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=181808&
로그인 하셔야 댓글을 사용하실수 있습니다.
댓글쓰기를 누르면 로그인 페이지로 이동 후 돌아옵니다.
총 댓글 겟수 0
번호 제목 등록일 작성자 조회수
671 struts2 intercept (0) 2014-12-29 이창우 1556
670 Reflection (0) 2014-07-07 이창우 1991
665 Timestamp <-> Date (0) 2014-04-02 이창우 2160
664 변환 date ->java.sql.date (0) 2014-03-24 이창우 2035
663 Unparseable date: "" (0) 2014-03-24 이창우 2955
659 Java Primitive Data Types (0) 2014-02-14 이창우 2424
568 abstract interface 차이점 (0) 2012-09-24 이창우 1350
-> Triple DES & DES JAVA ,C (0) 2011-12-26 이창우 2758
403 HttpClient (0) 2011-12-10 이창우 2600
220 콘솔에서 war 만들기 (0) 2011-07-13 이창우 3115
210 servlet 현재 주소 알아오기 (0) 2011-07-09 이창우 2266
188 A Java Runtime (0) 2011-06-27 이창우 2194
173 file 복사 (0) 2011-06-07 이창우 2046
172 파일 받기 (수정) (0) 2011-06-07 이창우 2294
170 파일 받기 (안됨) (0) 2011-06-07 이창우 1830
169 소켓으로 파일 받기(안됨) (0) 2011-06-07 이창우 2056
162 RCP Example (0) 2011-06-03 이창우 1888
161 rcp 설명 사이트 (1) 2011-06-03 이창우 2126
160 Thread Chatting 프로토 타입 2 (1) 2011-06-02 이창우 1741
158 object heap (0) 2011-06-01 이창우 1971
< 1 2 >
글쓰기 검색