개발자의 길

[java] AES 암호화,복호화 본문

4. JAVA

[java] AES 암호화,복호화

자르르 2016. 4. 19. 18:14


static String aesKey = "ZCXVsfda2F"; //이건 내 맘대로 랜덤


/**

     * hex to byte[] : 16진수 문자열을 바이트 배열로 변환한다.

     *

     * @param hex    hex string

     * @return

     */

    public static byte[] hexToByteArray(String hex) {

        if (hex == null || hex.length() == 0) {

            return null;

        }

        byte[] ba = new byte[hex.length() / 2];

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

            ba[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);

        }

        return ba;

    }

    /**

     * byte[] to hex : unsigned byte(바이트) 배열을 16진수 문자열로 바꾼다.

     *

     * @param ba        byte[]

     * @return

     */

    public static String byteArrayToHex(byte[] ba) {

        if (ba == null || ba.length == 0) {

            return null;

        }

        StringBuffer sb = new StringBuffer(ba.length * 2);

        String hexNumber;

        for (int x = 0; x < ba.length; x++) {

            hexNumber = "0" + Integer.toHexString(0xff & ba[x]);

            sb.append(hexNumber.substring(hexNumber.length() - 2));

        }

        return sb.toString();

    }

    /**

     * AES 방식의 암호화

     *

     * @param message

     * @return

     * @throws Exception

     */

     public static String encrypt(String message) throws Exception {

         // use key coss2

      javax.crypto.spec.SecretKeySpec skeySpec = new javax.crypto.spec.SecretKeySpec(aesKey.getBytes(), "AES");

         // Instantiate the cipher

         javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES");

         cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, skeySpec);

         byte[] encrypted = cipher.doFinal(message.getBytes());

         return byteArrayToHex(encrypted);

     }

     /**

      * AES 방식의 복호화

      *

      * @param message

      * @return

      * @throws Exception

      */

     public static String decrypt(String encrypted) throws Exception {

         // use key coss2

      javax.crypto.spec.SecretKeySpec skeySpec = new javax.crypto.spec.SecretKeySpec(aesKey.getBytes(), "AES");

         javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES");

         cipher.init(javax.crypto.Cipher.DECRYPT_MODE, skeySpec);

         byte[] original = cipher.doFinal(hexToByteArray(encrypted));

         String originalString = new String(original);

         return originalString;

     }



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments