找出设备是否已完全加密磁盘以及使用了什么加密?

时间:2011-06-14 09:39:31

标签: android encryption android-3.0-honeycomb

由于支持Android 3.0全磁盘加密,但我看不到任何能够使用该API的API。我需要知道的两件具体事情是:

  1. 设备是否已加密?
  2. 使用什么加密。
  3. 我找到了process here的低级解释,似乎建议使用的加密是带有CBC和ESSIV:SHA256的128 AES,但它没有讨论找出设备是否加密的方法。

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

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:3)

我认为您正在寻找的API是Device Administration APIs的一部分。具体来说,您需要设置DeviceAdminReceiver,并在device_admin.xml的“uses-policies”部分中添加“encrypted-storage”元素。然后,您可以自由调用setStorageEncryption来指示要强制执行的加密类型。 DeviceAdminSample.java应该为您提供您需要的大部分代码。这是一种间接的方式来确定设备是否已加密,但它是我所知道的唯一公共API。

这也不会告诉你正在使用什么样的加密......我无法为此找到API。