查找设备是否进行了全盘加密,以及使用的加密方式是什么?

6
自 Android 3.0 起支持全盘加密,但我找不到任何相关的 API。我需要知道以下两点:
1. 设备是否已加密? 2. 所使用的加密方式。
我在这里找到了一个低级别的 解释,它似乎表明所使用的加密方式为128位 AES 加密,并采用 CBC 和 ESSIV:SHA256,但没有提供查找设备是否加密的方法。
那么,我的应用程序是否可以查询设备是否使用全盘加密功能,还是需要采用类似 Runtime.exec 调用之类的 hacky 解决方案?
2个回答

12

正如 @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是设备管理API的一部分。具体来说,您需要设置一个DeviceAdminReceiver,并在device_admin.xml的“uses-policies”部分中添加一个“encrypted-storage”元素。然后,您就可以自由地调用setStorageEncryption来指示要强制执行的加密类型。DeviceAdminSample.java应该提供您所需的大部分代码。这是一种间接的方法,用于确定设备是否已加密,但这是我所知道的唯一公共API。
这也不会告诉您正在使用什么类型的加密...我找不到相应的API。

这确实是一个正确的答案,但它比那更容易 - 要查询信息,您不需要真正地跳过所有障碍,只需查询DevicePolicyManager.get*方法即可。 - Mikle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接