Here is a simple example of AES CB encryption in android using key and salt. I am not expert in encryption but I found how to do this pretty hard and I thought that maybe it will help somebody else if not , it will help me latter again :).
// decryption method
public static String decryptString(String cypher, String key, String textToDecrypt, String salt) {
byte[] rawKey = new byte[32];
java.util.Arrays.fill(rawKey, (byte) 0);
byte[] keyOk = hmacSha1(salt, key);
for (int i = 0; i < keyOk.length; i++) {
rawKey[i] = keyOk[i];
}
SecretKeySpec skeySpec = new SecretKeySpec(hmacSha1(salt, key), "AES");
try {
Cipher cipher = Cipher.getInstance(cypher);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encryptedData = cipher.doFinal(Base64.decode(textToDecrypt, Base64.NO_CLOSE));
if (encryptedData == null) return null;
return new String(encryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// encryption method
public static String encryptString(String cypher, String key, String clearText, String salt) {
byte[] rawKey = new byte[32];
java.util.Arrays.fill(rawKey, (byte) 0);
byte[] keyOk = hmacSha1(salt, key);
for (int i = 0; i < keyOk.length; i++) {
rawKey[i] = keyOk[i];
}
SecretKeySpec skeySpec = new SecretKeySpec(hmacSha1(salt, key), "AES");
try {
Cipher cipher = Cipher.getInstance(cypher);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encryptedData = cipher.doFinal(clearText.getBytes());
if (encryptedData == null) return null;
return Base64.encodeToString(encryptedData, Base64.NO_CLOSE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// key generator method
public static byte[] hmacSha1(String salt, String key) {
SecretKeyFactory factory = null;
Key keyByte = null;
try {
factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec keyspec = new PBEKeySpec(key.toCharArray(), salt.getBytes(), 1024, 256);
keyByte = factory.generateSecret(keyspec);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
return keyByte.getEncoded();
}
How to use it:
String encryptedString = encryptString("AES/ECB/PKCS5padding", "yourkeyhere", password, "yoursalthere");
String decryptedString = decryptString("AES/ECB/PKCS5padding", "yourkeyhere", encryptedString, "yoursalthere")
You can print this out and see that it works. :)
