2011-06-14 2 views
4

Android 3.0 전체 디스크 암호화가 지원되므로 해당 기능에 대한 API를 볼 수 없습니다. 내가 알아야 할 두 가지 구체적인 사항은 다음과 같습니다.장치가 전체 디스크로 암호화되어 있고 사용 된 암호화가 있는지 확인하십시오.

  1. 장치가 암호화되어 있는지 여부
  2. 어떤 암호화가 사용됩니까?

은 내가 process here 낮은 수준의 설명을 발견하고는 사용되는 암호화는 CBC와 ESSIV 128 AES입니다 제안 할 것 : SHA256하지만 장치의 암호화 여부를 찾을 수있는 방법에 대해 이야기하지 않습니다.

내 앱이 장치가 전체 디스크 암호화 기능을 사용하는지 여부를 쿼리하는 방법이 있습니까? 아니면 Runtime.exec 호출과 같은 해킹 솔루션을 사용해야합니까?

답변

9

@Mikle은 그냥 DevicePolicyManager를 호출하고 그에게 이것은 참으로 정답 상태

@SuppressLint("NewApi") 
    private boolean isEncrypted(Context context) { 
     DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context 
       .getSystemService(Context.DEVICE_POLICY_SERVICE); 

     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { 
      int status = devicePolicyManager.getStorageEncryptionStatus(); 
      if (DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE == status) { 
       return true; 
      } 
     } 
     return false; 
    } 
3

내가 찾는 API가 Device Administration APIs의 일부라고 생각합니다. 구체적으로 DeviceAdminReceiver를 설정하고 device_admin.xml의 "uses-policies"섹션에 "encrypted-storage"요소를 추가해야합니다. 그런 다음 setStorageEncryption을 호출하여 어떤 유형의 암호화를 적용 할 것인지 자유롭게 지정할 수 있습니다. DeviceAdminSample.java은 필요한 많은 코드를 제공해야합니다. 이는 기기가 암호화되었는지를 알아내는 간접적 인 방법이지만, 내가 아는 유일한 공개 API입니다.

이것은 또한 어떤 종류의 암호화가 사용되고 있는지 알려주지 않습니다 ... API를 찾을 수 없었습니다.

+0

을 요청할 수 있습니다 언급했지만, 그보다 더 쉽게으로 - 당신이 실제로 이동하지 않아도 정보를 조회하는 농구를 통해 DevicePolicyManager.get * 메소드를 쿼리하면됩니다. – Mikle

관련 문제