由于支持Android 3.0全磁盘加密,但我看不到任何能够使用该API的API。我需要知道的两件具体事情是:
我找到了process here的低级解释,似乎建议使用的加密是带有CBC和ESSIV:SHA256的128 AES,但它没有讨论找出设备是否加密的方法。
那么,我的应用程序是否可以查询设备是否使用完整磁盘加密功能,还是需要使用像Runtime.exec调用这样的hacky解决方案?
答案 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。