3 일 후 문제가 발생합니다. EditText에서 SharedPreferences로 텍스트를 저장해야합니다. 이 텍스트는 사용자가 지문 스캐너로 인증 한 후에 SharedPreference에 암호화하여 저장해야합니다. 그런 다음이 데이터를 해독해야하므로 생성 된 SecretKey에 대한 영구 저장 메커니즘이 필요합니다. 나는이 문제가 없습니다 .setUserAuthenticationRequired(true)
없이Android - 지문 인증을 사용하여 데이터 암호화 및 암호 해독
java.lang.IllegalArgumentException: InputStream not supported
at android.security.keystore.AndroidKeyStoreSpi.engineLoad(AndroidKeyStoreSpi.java:930)
: 나는 오류 받고 있어요
public static SecretKey getKeyFromKeystore(Context context) throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
FileInputStream fis = null;
try {
fis = context.openFileInput(KEYSTORE_FILENAME);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
// FileInputStream fis = context.openFileInput(KEYSTORE_FILENAME);
keyStore.load(fis, null);
SecretKey keyStoreKey = null;
try {
keyStoreKey = (SecretKey) keyStore.getKey(CONFIDENTIALITY_KEY, null);
} catch (KeyStoreException e) {
e.printStackTrace();
return null;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
return null;
}
return keyStoreKey;
}
을 :
private SecretKey createKey(String keyName) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEY_STORE);
keyGenerator.init(new KeyGenParameterSpec.Builder(keyName,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setKeySize(DEFAULT_KEY_SIZE)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setUserAuthenticationRequired(true)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build());
return keyGenerator.generateKey();
}
문제는 FileInputStream
을 사용하여 파일에서 KeyStore
을로드 할 때 일이다 하지만 이것이 지문 보안을 사용하는 올바른 방법이라고 생각하지 않습니다.
답장을 보내 주셔서 감사합니다.하지만 이미 RxFingerprint를 사용하고 있으며이 라이브러리에서 나중의 암호 해독을 위해 키 저장소 나 보안 키를 저장할 방법을 찾지 못했습니다. –