소스 첨부 했습니다.

 

코드 하이라이터 쓰기 어렵네요. ㅡ_ㅡ;

 

걍 대충 만들었던것을 클래스화 했는데요.

 

만들어 놓고 혼자쓰기 좀 뭐해서 걍 올렸습니다.

 

더 효율적인 방법도 있을 것 같은데 걍 저렇게 했습니다.

 

날코딩이 부끄럽네요~!

 

보시면 대충 감 잡히시겠지만..

 

실제 변수는 암호화해서 저장하고 보여지는 변수는

 

GetDisplayValue()로 참조 하시면 됩니다.

 

실제 변수를 바꾸실때는 GetDisplayValue() 참조 하지 마시고 GetValue 한 값을 변경한 후 SetValue하셔야 합니다.

 

그렇지 않으면 장난친 변수를 SetValue() 하게 되니까요.

 

(처음 올린 글 수정했습니다.)

(SetValue에 do_not_hacking = value 추가)


import java.util.Random;


import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;



public class t_protect {

protected static final String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

protected static Random Rand;

static{ Rand = new Random(); }

protected byte []fwhiqhwe;

protected byte []gerbv;

protected long do_not_hacking;

public t_protect(long value){ Init(value); }

public void Init(long value){

fwhiqhwe = new byte[16];

for(int i=0;i<16;++i) fwhiqhwe[i] = (byte)words.charAt(Rand.nextInt(62));

do_not_hacking = value;

SetValue(value);

}

public void SetValue(long value){

do_not_hacking = value;

   try{

    String input = Long.toString(value);

    SecretKeySpec skey = new SecretKeySpec(fwhiqhwe, "AES");

       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

       cipher.init(Cipher.ENCRYPT_MODE, skey);

       gerbv = cipher.doFinal(input.getBytes("UTF-8"));

   }catch(Exception e){ e.printStackTrace(); }

}

public long GetValue(){

   try{

       SecretKeySpec skey = new SecretKeySpec(fwhiqhwe,"AES");

       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

       cipher.init(Cipher.DECRYPT_MODE, skey);

       byte[]tmp = cipher.doFinal(gerbv);

       String ret = new String(tmp);

       return Integer.valueOf(ret);

       

   }catch(Exception e){ e.printStackTrace(); }

   return 0;

}

public void AddValue(long value){

long tmp = GetValue();

SetValue(tmp+value);

}

public long GetDisplayValue(){ return do_not_hacking; }

}

profile