我们正在为Android开发安全应用程序。用户需要对其设备的文件系统进行加密,但我们必须检查这一事实并禁止使用应用程序。是否可以检查文件系统是否已加密?还有一些设备使用Android<支持加密的3.0,例如Motorola RAZR。了解这些设备上的加密技术会很有趣。
答案 0 :(得分:13)
为了澄清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已经从全盘加密转变 基于文件的加密以支持Direct Boot等。 请参阅File Based Encryption。
答案 1 :(得分:8)
如果您的应用已注册为a device admin,则可以在getStorageEncryptionStatus()
上致电DevicePolicyManager
以查找设备的加密状态,以获取API等级11及更高版本。
对于较低API级别的任何整体设备加密,请与设备制造商联系。
答案 2 :(得分:4)
澄清以前的答案
关于API<当设备加密但密码未启用时,getStorageEncryptionStatus()
会返回ENCRYPTION_STATUS_INACTIVE
。
在API> = 23时,在这种情况下会返回ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY
。