2012-09-28 22 views
6

我們正在爲Android開發安全應用程序。用戶需要將設備的文件系統加密,但我們必須檢查這一事實並禁止使用應用程序。是否有可能檢查文件系統是否被加密?還有一些支持加密的Android < 3.0設備,例如摩托羅拉RAZR。瞭解這些設備上的加密會很有趣。檢查Android文件系統是否加密

回答

8

如果您的應用程序註冊爲a device admin,您可以致電getStorageEncryptionStatus()DevicePolicyManager以瞭解設備的加密狀態,API級別11及更高。

對於API級別較低的任何整個設備加密,請聯繫設備製造商。

+0

任何方式來找出加密是基於軟件還是硬件?至少在Android 5.1中。 –

+0

@ArtemRussakovskii:打敗我,對不起。 – CommonsWare

+0

@ArtemRussakovskii檢查此http://developer.android.com/reference/android/security/KeyChain.html#isBoundKeyAlgorithm(java.lang.String) – alfongj

12

只是爲了澄清CommonsWare的答案,您可以閱讀設備加密狀態沒有任何Android權限。

/** 
* Returns the encryption status of the device. Prior to Honeycomb, whole device encryption was 
* not supported by Android, and this method returns ENCRYPTION_STATUS_UNSUPPORTED. 
* 
* @return One of the following constants from DevicePolicyManager: 
*   ENCRYPTION_STATUS_UNSUPPORTED, ENCRYPTION_STATUS_INACTIVE, 
*   ENCRYPTION_STATUS_ACTIVATING, or ENCRYPTION_STATUS_ACTIVE. 
*/ 
@TargetApi(11) 
private int getDeviceEncryptionStatus() { 

    int status = DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED; 

    if (Build.VERSION.SDK_INT >= 11) { 
     final DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
     if (dpm != null) { 
      status = dpm.getStorageEncryptionStatus(); 
     } 
    } 

    return status; 
} 
+1

此代碼似乎不適用於我的2013型號Nexus 7.在此情況下,即使我已經採取措施加密設備,dpm.getStorageEncryptionStatus()也會返回ENCRYPTION_STATUS_INACTIVE。 –

4

澄清以前的答案 的API 回報ENCRYPTION_STATUS_INACTIVE當設備被加密,但was't啓用密碼。

對於API> = 23,在這種情況下返回ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY

+1

ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY未在三星設備上返回,例如,如果沒有定義啓動設備的PIN,則使用Android 6的S7。 – David