2017-11-14 3 views
1

키과 같이 안드로이드 키 저장소에 저장되어 저장 원시 바이트/문자열을 얻을 : 마찬가지로안드로이드 키 스토어 I가 키를 생성 할 수 있습니다

private static final String AndroidKeyStore = "AndroidKeyStore"; 
private static final String AES_MODE = "AES/GCM/NoPadding"; 
keyStore = KeyStore.getInstance(AndroidKeyStore); 
keyStore.load(null); 

if (!keyStore.containsAlias(KEY_ALIAS)) { 
    KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore); 
    keyGenerator.init(
      new KeyGenParameterSpec.Builder(KEY_ALIAS, 
        KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) 
        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)     .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) 
        .setRandomizedEncryptionRequired(false) 
        .build()); 
    keyGenerator.generateKey(); 
} 

를, 그래서처럼 검색 할 수 있습니다

keyStore.getKey(KEY_ALIAS, null); 

getKey() 함수가 Key 객체를 반환한다는 것을 알고 있지만 키 자체를 나타내는 방법을 찾지 못했습니다. 그것은 toString()이나 getBytes() 같은 것을 가지지 않는 것 같습니다.

키의 바이트를 가져 오거나 적어도 문자열 버전을 출력 할 수 있습니까? 심지어 가능할까요? 각각 바이트 [],

getAlgorithm() 
getEncoded() 
getFormat() 

그들은 문자열을 반환하고 문자열 : Key 객체가 반환

답변

0

"AndroidKeyStore"는이를 불가능하게하거나 적어도 매우 어렵게 만들도록 특별히 설계되었습니다. here에 대한보다 완전한 토론이 있지만 요약하면 다음과 같습니다.

Android Keystore 시스템은 키 자료를 무단으로 사용하지 못하도록 보호합니다. 첫 번째로 Android 키 저장소는 키를 응용 프로그램 프로세스 및 Android 장치에서 전체 키를 추출하지 못하게하여 안드로이드 장치 외부에서 키 데이터 의 무단 사용을 완화합니다.

귀하의 예를 들어, 다음 코드 추가 라인의 라인을 따라 계속 :

Key key = keyStore.getKey(KEY_ALIAS, null); 
String algorithm = key.getAlgorithm(); 
String format = key.getFormat(); 
byte[] encoded = key.getEncoded(); 

키가 algorithm는 "AES"를 반환해야 Key 객체에 대한 유효한 null이 아닌 참조 원인이 될한다, formatnull이어야하며 encoded이어야합니다.

0

는 방법이있다.

자세한 내용은 here을 클릭하십시오.

관련 문제