소스 첨부 했습니다.
코드 하이라이터 쓰기 어렵네요. ㅡ_ㅡ;
걍 대충 만들었던것을 클래스화 했는데요.
만들어 놓고 혼자쓰기 좀 뭐해서 걍 올렸습니다.
더 효율적인 방법도 있을 것 같은데 걍 저렇게 했습니다.
날코딩이 부끄럽네요~!
보시면 대충 감 잡히시겠지만..
실제 변수는 암호화해서 저장하고 보여지는 변수는
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; }
}
실제 gamecih로 찾아내면 바로 찾아집니다.
그때 메시지를 전달하려는 것이죠.
거기다 바꿔봐야 실제 적용이 안되는 굴욕감을 느끼게 해줍니다.
변수명으로 메시지를 전하세요.
전 사실 욕을 써놨는데 여기 올리려고 지웠습니다 ㅎ_ㅎ;