Programming/Android
Android KeyStore 사용 방법 Sample
Vita500cc
2022. 11. 27. 00:37
작성 목적
- Android KeyStore를 처음 사용하면서 추가하는데 자꾸 문제가 발생해서 성공한 내용 저장
간략 설명
- init, Encrypt, Decrypt 메서드로 나누어서 작성
- iv 값은 공개할수 없으므로 Sample에 정리 할때는 0으로 설정
Sample Code
//KeyStore 사용을 위한 변수
private static final String ANDROID_KEY_STORE = "AndroidKeyStore";
private static final String ALIAS = "com.test.keystore";
private static KeyGenerator keyGenerator;
private static KeyGenParameterSpec keyGenParameterSpec;
private static byte[] iv = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
public void keyStoreInit(Context context){
try{
Log.d("TEST", "keyStoreInit start!");
KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
keyStore.load(null);
if(!keyStore.containsAlias(ALIAS)){
keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEY_STORE);
keyGenParameterSpec = new KeyGenParameterSpec.Builder(ALIAS, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setRandomizedEncryptionRequired(false)
.build();
keyGenerator.init(keyGenParameterSpec);
keyGenerator.generateKey();
}
}catch(Exception e){
e.printStackTrace();
}
}
public static String encryptKeyStore(String autoConnData){
String encryptedData = "";
try{
KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
keyStore.load(null);
IvParameterSpec ivspec = new IvParameterSpec(iv);
KeyStore.SecretKeyEntry secretKeyEntry = (KeyStore.SecretKeyEntry) keyStore.getEntry(ALIAS,null);
SecretKey secretKey = secretKeyEntry.getSecretKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
byte[] encryptedByte = cipher.doFinal(autoConnData.getBytes("UTF-8"));
encryptedData = Base64.encodeToString(encryptedByte, Base64.NO_WRAP);
} catch (Exception e){
e.printStackTrace();
}
return encryptedData;
}
public static String decryptKeyStore(String encryptedData){
String decryptedData="";
try {
KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
keyStore.load(null);
IvParameterSpec ivspec = new IvParameterSpec(iv);
KeyStore.SecretKeyEntry secretKeyEntry = (KeyStore.SecretKeyEntry) keyStore.getEntry(ALIAS,null);
SecretKey secretKey = secretKeyEntry.getSecretKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
byte[] decryptedByte = Base64.decode(encryptedData.getBytes("UTF-8"), Base64.NO_WRAP);
decryptedData = new String(cipher.doFinal(decryptedByte));
} catch (Exception e){
e.printStackTrace();
}
return decryptedData;
}