6

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

4

3 回答 3

15

只是为了澄清 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加密状态标志的文档。

还值得一提的是,Android 已从全盘加密转向基于文件的加密,以支持直接启动等。请参阅基于文件的加密

于 2013-05-23T22:57:34.280 回答
9

如果您的应用已注册为设备管理员,您可以调用getStorageEncryptionStatus()DevicePolicyManager了解设备的加密状态,API 级别 11 及更高级别。

对于较低 API 级别的任何全设备加密,请联系设备制造商。

于 2012-09-28T13:16:01.310 回答
5

当设备已加密但未启用密码时,澄清先前关于 API < 23getStorageEncryptionStatus()返回的答案。ENCRYPTION_STATUS_INACTIVE

在 API >= 23 上,它ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY在这种情况下返回。

于 2016-02-09T13:45:01.323 回答