티스토리 뷰
파일 자체를 암호화 처리 할때 문제
간혹 가다가 이미지 저작권 문제 때문에 이미지를 복사 못하게 막아야한다. 하지만
안드로이드에서는 apk파일을 압축을 풀어서 또는 SDcard에 있는 숨겨진 파일을 찾아서 다른 이들이 무단으로 사용할수도 있으
니 이를 막기 위해서 이미지 파일 자체를 암호화 처리해서 이미지를 로드할때 복호화해서 로드를 하면 해결 할수 있다.
변경전 이미지 파일
변경후 이미지파일
암호화 처리할때
private static final String algorithm = "AES"; private static final String transformation = algorithm + "/ECB/PKCS5Padding"; private Key key; public FileCoder(Key key) { this.key = key; } public void encrypt(File source, File dest) throws Exception { crypt(Cipher.ENCRYPT_MODE, source, dest); } private void crypt(int mode, File source, File dest) throws Exception { Cipher cipher = Cipher.getInstance(transformation); cipher.init(mode, key); InputStream input = null; OutputStream output = null; try { input = new BufferedInputStream(new FileInputStream(source)); output = new BufferedOutputStream(new FileOutputStream(dest)); byte[] buffer = new byte[1024]; int read = -1; while ((read = input.read(buffer)) != -1) { output.write(cipher.update(buffer, 0, read)); } output.write(cipher.doFinal()); } finally { if (output != null) { try { output.close(); } catch(IOException ie) {} } if (input != null) { try { input.close(); } catch(IOException ie) {} } } } public static void main(String[] args) throws Exception { // 128비트의 키 SecretKeySpec key = new SecretKeySpec(toBytes("key값을 넣어요~~", 16), algorithm); FileCoder coder = new FileCoder(key); coder.encrypt(new File("D:/a.jpg"), new File("D:/aa.jpg")); }
안드로이드에서 암호해독할때
public class AndroidTestSecurityActivity extends Activity { /** Called when the activity is first created. */ private static final String algorithm = "AES"; private static final String transformation = algorithm + "/ECB/PKCS5Padding"; Button button; ImageView imageview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)findViewById(R.id.button); imageview= (ImageView)findViewById(R.id.image); button.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View view, MotionEvent event) { // TODO Auto-generated method stub int eventaction = event.getAction(); switch(eventaction){ case MotionEvent.ACTION_DOWN : return true; case MotionEvent.ACTION_MOVE : return true; case MotionEvent.ACTION_UP : SecretKeySpec key = new SecretKeySpec(toBytes("696d697373796f7568616e6765656e61", 16),algorithm); FileCoder coder = new FileCoder(key); try { //coder.encrypt(new File("D:/a.jpg"), new File("D:/aa.jpg")); coder.decrypt(new File("/sdcard/aa.jpg")); } catch (Exception e) { // TODO: handle exception } return true; } return false; } }); } public static byte[] toBytes(String digits, int radix) throws IllegalArgumentException, NumberFormatException { if (digits == null) { return null; } if (radix != 16 &&radix != 10 &&radix != 8) { throw new IllegalArgumentException("For input radix: \"" + radix + "\""); } int divLen = (radix == 16) ? 2 : 3; int length = digits.length(); if (length % divLen == 1) { throw new IllegalArgumentException("For input string: \"" + digits + "\""); } length = length / divLen; byte[] bytes = new byte[length]; for (int i = 0; i
'개발 > 개발 자료' 카테고리의 다른 글
[Android] byte -> int , int -> byte 로의 변환 (0) | 2013.09.29 |
---|---|
[Cocos2d-x] CCMenu 사용하기 (0) | 2013.09.26 |
[OpenCV] 안드로이드 환경세팅 (0) | 2013.09.17 |
[Android] 안드로이드 위젯 만들기 (0) | 2013.09.16 |
[Android] bitmap을 drawable로 바꾸는 과정 (0) | 2013.09.15 |
댓글