检查Android文件系统是否已加密

时间:2012-09-28 13:11:51

标签: android security encryption filesystems

我们正在为Android开发安全应用程序。用户需要对其设备的文件系统进行加密,但我们必须检查这一事实并禁止使用应用程序。是否可以检查文件系统是否已加密?还有一些设备使用Android<支持加密的3.0,例如Motorola RAZR。了解这些设备上的加密技术会很有趣。

3 个答案:

答案 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;
}

请参阅DevicePolicyManagerencryption 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