This is a simple example showing how to encrypt and decrypt a file in android.
1. Generate a key for encrypting our data.
2. Create a file and save data using ENCRYPTION with our generated key to the SDCARD.
3. With the help of the key DECRYPT the file and show the contents.
This complete program does this.
Please check the Logcat for the output.
1. Generate a key for encrypting our data.
2. Create a file and save data using ENCRYPTION with our generated key to the SDCARD.
3. With the help of the key DECRYPT the file and show the contents.
This complete program does this.
Please check the Logcat for the output.
package
com.smr.encryptfile;
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.<span id=
"IL_AD3"
class
=
"IL_AD"
>security</span>.NoSuchAlgorithmException;
import
java.security.SecureRandom;
import
java.security.spec.InvalidKeySpecException;
import
java.security.spec.KeySpec;
import
javax.crypto.Cipher;
import
javax.crypto.KeyGenerator;
import
javax.crypto.SecretKey;
import
javax.crypto.SecretKeyFactory;
import
javax.crypto.spec.IvParameterSpec;
import
javax.crypto.spec.PBEKeySpec;
import
javax.crypto.spec.SecretKeySpec;
import
android.app.Activity;
import
android.os.Bundle;
import
android.os.Environment;
<span id=
"IL_AD7"
class
=
"IL_AD"
>
public
</span>
class
MainActivity
extends
Activity {
private
String encryptedFileName =
"Enc_File.txt"
;
private
static
String <span id=
"IL_AD2"
class
=
"IL_AD"
>algorithm</span> =
"AES"
;
static
SecretKey yourKey =
null
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveFile(
"Hello From CoderzHeaven asaksjalksjals"
);
decodeFile();
}
public
static
SecretKey generateKey(
char
[] passphraseOrPin,
byte
[] salt)
throws
NoSuchAlgorithmException, InvalidKeySpecException {
// Number of PBKDF2 hardening rounds to use. Larger values increase
// computation time. You should select a value that causes computation
// to take >100ms.
final
int
iterations =
1000
;
// Generate a 256-bit key
final
int
outputKeyLength =
256
;
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(
"PBKDF2WithHmacSHA1"
);
KeySpec keySpec =
new
PBEKeySpec(passphraseOrPin, salt, iterations, outputKeyLength);
SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
return
secretKey;
}
public
static
SecretKey generateKey()
throws
NoSuchAlgorithmException {
// Generate a 256-bit key
final
int
outputKeyLength =
256
;
SecureRandom secureRandom =
new
SecureRandom();
// Do *not* seed secureRandom! Automatically seeded from system entropy.
KeyGenerator keyGenerator = KeyGenerator.getInstance(
"AES"
);
keyGenerator.init(outputKeyLength, secureRandom);
yourKey = keyGenerator.generateKey();
return
yourKey;
}
public
static
byte
[] encodeFile(SecretKey yourKey,
byte
[] fileData)
throws
Exception {
byte
[] encrypted =
null
;
byte
[] data = yourKey.getEncoded();
SecretKeySpec skeySpec =
new
SecretKeySpec(data,
0
, data.length,
algorithm);
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec,
new
IvParameterSpec(
new
byte
[cipher.getBlockSize()]));
encrypted = cipher.doFinal(fileData);
return
encrypted;
}
public
static
byte
[] decodeFile(SecretKey yourKey,
byte
[] fileData)
throws
Exception {
byte
[] decrypted =
null
;
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, yourKey,
new
IvParameterSpec(
new
byte
[cipher.getBlockSize()]));
decrypted = cipher.doFinal(fileData);
return
decrypted;
}
void
saveFile(String stringToSave) {
try
{
File file =
new
File(Environment.getExternalStorageDirectory()
+ File.separator, encryptedFileName);
BufferedOutputStream bos =
new
BufferedOutputStream(
new
FileOutputStream(file));
yourKey = generateKey();
byte
[] filesBytes = encodeFile(yourKey, stringToSave.getBytes());
bos.write(filesBytes);
bos.flush();
bos.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
catch
(Exception e) {
e.printStackTrace();
}
}
void
decodeFile() {
try
{
byte
[] decodedData = decodeFile(yourKey, readFile());
String str =
new
String(decodedData);
System.out.println(
"DECODED FILE CONTENTS : "
+ str);
}
catch
(Exception e) {
e.printStackTrace();
}
}
public
byte
[] readFile() {
byte
[] contents =
null
;
File file =
new
File(Environment.getExternalStorageDirectory()
+ File.separator, encryptedFileName);
int
size = (
int
) file.length();
contents =
new
byte
[size];
try
{
BufferedInputStream buf =
new
BufferedInputStream(
new
FileInputStream(file));
try
{
buf.read(contents);
buf.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
return
contents;
}
}
No comments:
Post a Comment