【发布时间】:2012-09-20 09:06:59
【问题描述】:
我们正在开发适用于 Android 的安全应用程序。用户需要对其设备的文件系统进行加密,但我们必须检查这一事实并禁止使用 app。是否可以检查文件系统是否已加密?还有一些 Android
【问题讨论】:
标签: android security encryption filesystems
我们正在开发适用于 Android 的安全应用程序。用户需要对其设备的文件系统进行加密,但我们必须检查这一事实并禁止使用 app。是否可以检查文件系统是否已加密?还有一些 Android
【问题讨论】:
标签: android security encryption filesystems
为了澄清 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, ENCRYPTION_STATUS_ACTIVE,
* ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY, ENCRYPTION_STATUS_ACTIVE_PER_USER.
*/
@TargetApi(11)
private static int getDeviceEncryptionStatus(Context context)
{
int status = DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
if (Build.VERSION.SDK_INT >= 11) {
final DevicePolicyManager dpm =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (dpm != null) {
status = dpm.getStorageEncryptionStatus();
}
}
return status;
}
请参阅 DevicePolicyManager 和 encryption status flags 的文档。
还值得一提的是,Android 已经从全盘加密转向 到基于文件的加密以支持直接启动等。 见File Based Encryption。
【讨论】:
如果您的应用注册为a device admin,您可以在DevicePolicyManager 上调用getStorageEncryptionStatus() 以了解设备的加密状态,适用于API 级别11 及更高级别。
对于较低 API 级别的任何全设备加密,请联系设备制造商。
【讨论】:
澄清以前的答案
当设备已加密但未启用密码时,API getStorageEncryptionStatus() 返回 ENCRYPTION_STATUS_INACTIVE。
在 API >= 23 上它在这种情况下返回 ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY。
【讨论】: