2011-06-14 23 views
4

由于支持Android 3.0全盘加密,但我无法看到该功能的任何API。我需要知道的两件事是:找出设备是否全盘加密以及使用了什么加密?

  1. 设备是否加密?
  2. 使用什么加密。

我发现process here低水平的解释,似乎表明所使用的加密是AES 128 CBC与和ESSIV:SHA256,但它并没有谈论办法找到该设备是否被加密。

那么,我的应用程序可以查询设备是使用全盘加密功能还是需要使用像Runtime.exec调用这样的hacky解决方案?

回答

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 2011-06-16 17:24:03