https://github.com/YoungHoonZo/GizmoUtils/blob/master/src/main/java/com/gizmo/utils/GizmoEncrypt.java

 

GitHub - YoungHoonZo/GizmoUtils

Contribute to YoungHoonZo/GizmoUtils development by creating an account on GitHub.

github.com

그간 시간 없다는 핑계로 몇년째 미루고 있는 ㅡㅡ;;;

Utils 클레스 정리좀 해야겠다...

우선 암/복호화 클레스...

이것도 수년전에 Seed128적용하기 위해 어느 블로그에서 찾아서 사용했던거 같은데...출처는 기억 나질 않는다..ㅡㅡ;;;

(이 소스를 다시 보니 수년전에 Seed128적용한다고 했던 삽질이 보이는건...착각 이겠지?? ㅡㅡ;;)

1. KISA에서 제공하는 Seed128 암호화 및 복호화

2. Base64인코딩, Base64디코딩도 있기는 한데 좀 더 테스트 해봐야 한다. 

3. SHA-512 암호화(현재로써는 복호화는 불가.)

전체 소스는 GitHub에 있다...

많은 프로삽질러들의 삽질이 좀 줄어들길 바라며...

GitHub에 가서 TestMain 실행해 보면 샘플 몇개 있습니다...

그리고 좀 내어놓기 부끄러운 코드들이 많이 있습니다...ㅡㅡ;;;

너그러이 양해 부탁 드립니다. 

public class GizmoEncrypt {

    //암호화키.
    private static final String encryptKey = "q3sw5d7r7$+&*)%0";

    /**
     * @deprecated seedKey를 파라미터로 받는 getEncryptString를 사용하길 권장함.
     * 주어진 문자열을 seed128로 암호화 하여 돌려준다.
     * @param str 암호화할 문자열.
     * @return 암호화된 문자열.
     * @throws Exception
     */
    @Deprecated
    public static String getEncryptString(String str) throws Exception{

        int[] key = SeedUtil.getSeedRoundKey(encryptKey);
//      return Base64.encode(seed.encrypt(str, Util.encryptKey.getBytes(), "UTF-8"));
        return SeedUtil.getSeedEncrypt(str, key);
    }

    /**
     * 특정 암호화키로 주어진 문자열을 seed128로 암호화 하여 돌려준다.
     * @param str 암호화할 문자열.
     * @param seedKey 암호화키
     * @return
     * @throws Exception
     */
    public static String getEncryptString(String str, String seedKey) throws Exception{

        int[] key = SeedUtil.getSeedRoundKey(seedKey);
//      return Base64.encode(seed.encrypt(str, Util.encryptKey.getBytes(), "UTF-8"));
        return SeedUtil.getSeedEncrypt(str, key);
    }

    /**
     * @deprecated seedKey를 파라미터로 받는 getDecryptString 사용하길 권장함.
     * 주어진 암호화문을 복호화하여 돌려준다.
     * @param str
     * @return 복호화된 문자열
     * @throws Exception
     */
    @Deprecated
    public static String getDecryptString(String str) throws Exception{
        int[] key = SeedUtil.getSeedRoundKey(encryptKey);
        return SeedUtil.getSeedDecrypt(str, key);
//      byte[] encryptbytes = Base64.decode(nullToEmpty(str));
//      String decryptText = seed.decryptAsString(encryptbytes, Util.encryptKey.getBytes(), "UTF-8");
//      return decryptText;
    }

    /**
     * 특정 암호화키로 주어진 암호화문을 복호화하여 돌려준다.
     * @param str
     * @param seedKey
     * @return
     * @throws Exception
     */
    public static String getDecryptString(String str, String seedKey) throws Exception{
        int[] key = SeedUtil.getSeedRoundKey(seedKey);
        return SeedUtil.getSeedDecrypt(str, key);
//      byte[] encryptbytes = Base64.decode(nullToEmpty(str));
//      String decryptText = seed.decryptAsString(encryptbytes, Util.encryptKey.getBytes(), "UTF-8");
//      return decryptText;
    }

   /**
     * 문자 또는 문자열을 SHA-512로 암호화 한다.
     * @param text 암호화 대상 문자열.
     * @return
     */
    public static String getSha512Hex(String text) {

        MessageDigest md;
        String message = text;
        String mes1 = "";
        String mes2 = "";
        try {
            md = MessageDigest.getInstance("SHA-512");

            md.update(message.getBytes());
            byte[] mb = md.digest();
            for (int i = 0; i < mb.length; i++) {
                byte temp = mb[i];
                String s = Integer.toHexString(new Byte(temp));
                while (s.length() < 2) {
                    s = "0" + s;
                }
                s = s.substring(s.length() - 2);
                mes1 += s;
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return mes1;
    }

   /**
     * 문자 또는 문자열을 SHA-512로 암호화 한다.
     * @param text 암호화 대상 문자열.
     * @param charEnum 암호화 캐릭터셋. 캐릭터셋에 따라 암호화 값이 달라진다.
     * @return
     */
    public static String getSha512Hex(String text, CharsetEnum charEnum) {

        MessageDigest md;
        String message = text;
        String mes1 = "";
        String mes2 = "";
        try {
            md = MessageDigest.getInstance("SHA-512");

            md.update(message.getBytes(charEnum.getCharset()));
            byte[] mb = md.digest();
            for (int i = 0; i < mb.length; i++) {
                byte temp = mb[i];
                String s = Integer.toHexString(new Byte(temp));
                while (s.length() < 2) {
                    s = "0" + s;
                }
                s = s.substring(s.length() - 2);
                mes1 += s;
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }

        return mes1;
    }

   /**
     * @deprecated CharsetEnum를 파라미터로 받는 getSha512Hex 사용하길 권장함.
     * 문자 또는 문자열을 SHA-512로 암호화 한다.
     *
     * @param text 암호화 대상 문자열.
     * @param charset 암호화 캐릭터셋. 캐릭터셋에 따라 암호화 값이 달라진다.
     * @return
     */
    @Deprecated
    public static String getSha512Hex(String text, String charset) {

        MessageDigest md;
        String message = text;
        String mes1 = "";
        String mes2 = "";
        try {
            md = MessageDigest.getInstance("SHA-512");

            md.update(message.getBytes(charset));
            byte[] mb = md.digest();
            for (int i = 0; i < mb.length; i++) {
                byte temp = mb[i];
                String s = Integer.toHexString(new Byte(temp));
                while (s.length() < 2) {
                    s = "0" + s;
                }
                s = s.substring(s.length() - 2);
                mes1 += s;
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }

        return mes1;
    }

    /**
     * 문자열을 base64로 인코딩 한다.
     * base64 인코딩은 캐릭터셋에 따라서 값이 달라지기 때문에
     * 인코딩된 값으로 비교를 하기 위해서는 각 캐릭터셋을 다 대조 해봐야 한다.
     * @param str
     * @return
     */
    public static String getBase64Encode(String str) {
       return Base64.encodeBase64String(str.getBytes());
    }

    /**
     * 문자열을 charEnum에 해당하는 캐릭터셋의 base64로 인코딩 한다.
     * @param str base64 인코딩할 문자열.
     * @param charEnum 문자열의 캐릿터셋.
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String getBase64Encode(String str, CharsetEnum charEnum) throws UnsupportedEncodingException {

       return Base64.encodeBase64String(str.getBytes(charEnum.getCharset()));
    }

    /**
     * base64인코딩된 문자열을 다시 디코딩 한다.
     * @param base64Str
     * @return
     */
    public static String getBase64Decode(String base64Str) {
       return new String(Base64.decodeBase64(base64Str));
    }

    /**
     * base64인코딩된 문자열을 charEnum에 해당하는 캐릭터셋으로 다시 디코딩 한다.
     * @param base64Str
     * @param charEnum
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String getBase64Decode(String base64Str, CharsetEnum charEnum) throws UnsupportedEncodingException {

       return new String(Base64.decodeBase64(base64Str.getBytes(charEnum.getCharset())));
    }
}
복사했습니다!