파일 자체를 암호화 처리 할때 문제
간혹 가다가 이미지 저작권 문제 때문에 이미지를 복사 못하게 막아야한다. 하지만
안드로이드에서는 apk파일을 압축을 풀어서 또는 SDcard에 있는 숨겨진 파일을 찾아서 다른 이들이 무단으로 사용할수도 있으
니 이를 막기 위해서 이미지 파일 자체를 암호화 처리해서 이미지를 로드할때 복호화해서 로드를 하면 해결 할수 있다.
변경전 이미지 파일
간혹 가다가 이미지 저작권 문제 때문에 이미지를 복사 못하게 막아야한다. 하지만
안드로이드에서는 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>
댓글 없음:
댓글 쓰기