2014년 8월 6일 수요일

[Android] 이미지 암호화 열었을때 해독불가능하게하기

파일 자체를 암호화 처리 할때 문제

간혹 가다가 이미지 저작권 문제 때문에 이미지를 복사 못하게 막아야한다.  하지만 

안드로이드에서는 apk파일을 압축을 풀어서 또는 SDcard에 있는 숨겨진 파일을 찾아서 다른 이들이 무단으로 사용할수도 있으

니 이를 막기 위해서 이미지 파일 자체를 암호화 처리해서 이미지를 로드할때 복호화해서 로드를 하면 해결 할수 있다.

변경전 이미지 파일
변경후 이미지파일 

 


암호화 처리할때 

01.<font color="#6d6d65" face="Verdana"private static final String algorithm = "AES";
02.private static final String transformation = algorithm + "/ECB/PKCS5Padding";
03.private Key key;
04. 
05.public FileCoder(Key key) {
06.this.key = key;
07.}
08. 
09.public void encrypt(File source, File dest) throws Exception {
10.crypt(Cipher.ENCRYPT_MODE, source, dest);
11.}
12. 
13.private void crypt(int mode, File source, File dest) throws Exception {
14.Cipher cipher = Cipher.getInstance(transformation);
15.cipher.init(mode, key);
16.InputStream input = null;
17.OutputStream output = null;
18.try {
19.input = new BufferedInputStream(new FileInputStream(source));
20.output = new BufferedOutputStream(new FileOutputStream(dest));
21.byte[] buffer = new byte[1024];
22.int read = -1;
23.while ((read = input.read(buffer)) != -1) {
24.output.write(cipher.update(buffer, 0, read));
25.}
26.output.write(cipher.doFinal());
27.finally {
28.if (output != null) {
29.try { output.close(); } catch(IOException ie) {}
30.}
31.if (input != null) {
32.try { input.close(); } catch(IOException ie) {}
33.}
34.}
35.}
36.public static void main(String[] args) throws Exception {
37.// 128비트의 키
38. 
39.SecretKeySpec key = new SecretKeySpec(toBytes("key값을 넣어요~~"16), algorithm);
40.FileCoder coder = new FileCoder(key);
41.coder.encrypt(new File("D:/a.jpg"), new File("D:/aa.jpg"));
42.}
43. 
44.</font>

       
 

안드로이드에서 암호해독할때 


01.<font color="#6d6d65" face="Verdana">public class AndroidTestSecurityActivity extends Activity {
02./** Called when the activity is first created. */
03.private static final String algorithm = "AES";
04.private static final String transformation = algorithm + "/ECB/PKCS5Padding";
05.Button button;
06.ImageView imageview;
07.@Override
08.public void onCreate(Bundle savedInstanceState) {
09.super.onCreate(savedInstanceState);
10.setContentView(R.layout.main);
11. 
12.button = (Button)findViewById(R.id.button);
13.imageview= (ImageView)findViewById(R.id.image);
14. 
15.button.setOnTouchListener(new OnTouchListener(){
16.public boolean onTouch(View view, MotionEvent event) {
17.// TODO Auto-generated method stub
18.int eventaction = event.getAction();
19.switch(eventaction){
20.case MotionEvent.ACTION_DOWN :
21.return true;
22.case MotionEvent.ACTION_MOVE :
23.return true;
24.case MotionEvent.ACTION_UP :
25. 
26.SecretKeySpec key = new
27.SecretKeySpec(toBytes("696d697373796f7568616e6765656e61"16),algorithm);
28.FileCoder coder = new FileCoder(key);
29.try {
30.//coder.encrypt(new File("D:/a.jpg"), new File("D:/aa.jpg"));
31.coder.decrypt(new File("/sdcard/aa.jpg"));
32.catch (Exception e) {
33.// TODO: handle exception
34.}
35.return true;
36.}
37.return false;
38.}
39.});
40.}
41. 
42. 
43.public static byte[] toBytes(String digits, int radix) throws IllegalArgumentException, NumberFormatException {
44.if (digits == null) {
45.return null;
46.}
47.if (radix != 16 &&radix != 10 &&radix != 8) {
48.throw new IllegalArgumentException("For input radix: \"" + radix + "\"");
49.}
50.int divLen = (radix == 16) ? 2 3;
51.int length = digits.length();
52.if (length % divLen == 1) {
53.throw new IllegalArgumentException("For input string: \"" + digits + "\"");
54.}
55.length = length / divLen;
56.byte[] bytes = new byte[length];
57.for (int i = 0; i <length; i++)="" {="" int="" index="i" *="" divlen;="" bytes[i]="(byte)(Short.parseShort(digits.substring(index,"index+divlen),="" radix));="" }="" return="" bytes;="" public="" class="" filecoder="" private="" key="" key;="" filecoder(key="" key)=""this.key="key;" void="" decrypt(file="" source)="" throws="" exception="" crypt(cipher.decrypt_mode,="" source);="" crypt(int=""mode,="" file="" cipher="" cipher.init(mode,="" key);="" inputstream="" input="null;" byte[]="" aa="new" byte[1024*1024];="" i="0;"try="" bufferedinputstream(new="" fileinputstream(source));="" buffer="new" byte[1024];="" read="-1;" while=""((read="input.read(buffer))" !="-1)" vbuffer="cipher.update(buffer," 0,="" read);="" for(int="" j="0" ;="" j<vbuffer.length;="" j++){=""aa[i]="vbuffer[j];" i++;="" while(buffer[i]="" system.out.println(aa[i]);="" system.out.println(aa);="" is="new" bytearrayinputstream(aa);=""bitmap="" imageview.setimagebitmap(bitmap);="" finally="" if="" (input="" input.close();="" catch(ioexception="" ie)="" {}="" <=""pre="">
58. 
59. 
60. 
61.</length;></font><p></p>

댓글 없음:

댓글 쓰기