问题标签 [android-jetpack-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1153 浏览

java - 有没有办法将 EncryptedSharedPreference 与 PreferenceScreen 集成?

我是android开发的新手。目前,我想加密一个名为 Shared Preference 的自定义并与 PreferenceScreen 集成但未能这样做。我正在使用依赖项:

  1. androidx.security:security-crypto:1.0.0-alpha02 [EncryptedSharedPreference]
  2. androidx.preference:preference:1.1.0 [PreferenceScreen]

我曾尝试研究有关这两个功能集成的相关信息,但未找到相关信息。

根据我的测试,我有一个现有的加密共享首选项并测试了以下 API:

但它最终以简单的价值保存了偏好。

我的问题:

  1. 在当前阶段是否可以将这两个功能集成在一起?
  2. PreferenceScreen 是否提供我不知道的加密功能?
  3. 如果我坚持使用 EncryptedSharedPreference,我创建一个看起来像偏好屏幕的自定义活动会更好吗?
0 投票
2 回答
1479 浏览

android - 使用 EncryptedSharedPreferences 和 Biometric 在 Android 上保存敏感数据

我想存储敏感信息,例如登录 PIN。如今,有了EncryptedSharedPreferences (ESP),人们可以争辩说这就足够了。但是,假设我想提供使用Biometrics的可能性。这个谷歌示例向我们展示了如何使用BiometricPrompt.CryptoObject数据加密和解密。

但这提出了一个问题:
我是否应该在不增加另一层安全性的情况下将 PIN 保存在 ESP 中?

如果是这样,生物识别提示将作为一种更快、更方便的方式来插入 PIN。我只需要倾听onAuthenticationSucceeded忽略result: BiometricPrompt.AuthenticationResult并假设用户已登录(或使用保存在 ESP 中的 PIN 值执行 API 登录)。CryptographyManager如果我将 PIN 保存在 ESP 中,但通过( cryptographyManager.encryptData/ )的加密提供了额外的安全层,cryptographyManager.decryptData当用户手动插入 PIN 时我会遇到麻烦,因为我无法加密插入的数据和与加密存储的比较。在这种情况下,我将没有Cipher对象,因为没有BiometricPrompt(假设我想提供离线登录的可能性)。

也许我在这里遗漏了一步,但是将 PIN 存储在 ESP 中并仅使用生物识别技术进行“便捷登录”就足够了吗?

0 投票
3 回答
1583 浏览

android - 使用 EncryptedSharedPreferences 时是否应使用任何 proguard 规则?

在使用EncryptedSharedPreferences之前,我的应用程序在发布模式下运行良好(minifyEnabled = true),将安全库 (版本 1.0.0-rc01)添加到我的应用程序后,应用程序在打开时崩溃,如果我使用(minifyEnabled = false)应用程序工作好吧,我想我错过了一些可以在proguard-rules.pro中添加它的东西,但我搜索了很多没有找到任何东西。

0 投票
1 回答
118 浏览

android - Android Jetpack 安全性 - 示例代码无法编译“找不到适合 FileReader(EncryptedFile) 的构造函数”

我正在测试 Google 的 Android Jetpack 测试版的安全性。

这里的示例代码很简单,但它不会编译:

我已将依赖项包含在我的 gradle 中:

在此处搜索 FileReader 文档,我看不到如何使此示例代码正常工作。

为了完整起见,这是我的功能:

0 投票
1 回答
556 浏览

android - EncryptedSharedPreferences isUserAuthenticationRequired 无法正常工作

我正在使用 EncryptedSharedPreferences 来存储加密数据。

实际上,我错过了 BiometricPrompt 部分。我认为调用setUserAuthenticationRequired(true)会自动处理身份验证用户。但我们必须自己显示 BiometricPrompt。isUserAuthenticationRequiredonly 确保只有在用户被授权时才会激活密钥。

但有个问题。它只会在创建EncryptedSharedPreferences. 之后,我们可以根据需要执行读写操作。它没有考虑到setUserAuthenticationValidityDurationSeconds(1).

0 投票
1 回答
631 浏览

android - 在流异常中没有找到与密文匹配的密钥

嗨,我正在使用 jetpack 安全加密库来加密文件。我已经用下面的代码生成了万能钥匙。

我已加密我的文本文件 Sample.txt 并将加密文件写入设备外部存储。代码如下。

我将加密文件放在资产文件夹中,现在尝试解密,但根据文档 EncryptedFile.Builder 始终将文件对象作为参数,目前我在从资产读取文件后有 Inputstream。因此,为了获取文件对象,我将此 Inutstream 作为 Temp.txt 写入外部存储,并将此文件传递给解密。但我收到异常java.io.IOException: No matching key found for the ciphertext in the stream。

解密代码如下:

主要场景: 如果将加密文件写入外部存储并直接从外部存储读取解密,那么一切都是工作文件。但是,如果我将加密文件粘贴到资产文件夹中并将从资产文件夹获取的 Inputstream 写入某个临时文件,然后尝试解密它会给出错误 java.io.IOException: No matching key found for the ciphertext in the stream。

请任何人帮助我解决这个问题。谢谢

0 投票
1 回答
658 浏览

android - 在 Android 中使用 Jetpack Security 进行字符串加密

目前我们将我们的字符串加密为:

但是我们收到了来自 Google Play 管理中心的安全警报:

您的应用包含不安全的密码加密模式。

在此处输入图像描述

然后我们被重定向到这个链接:Remediation for Unsafe Cryptographic Encryption。但是,此链接建议使用Jetpack Security包,其中我找不到如何加密字符串并为我们的每个服务器请求生成安全的KEY 和 IV

我访问过的所有示例和链接都指向将您的敏感数据保存到加密文件和 SharedPreferences。

那么,我现在该怎么办?我是否必须找到也可以在服务器端(Java)解码的安全密钥生成机制并将该密钥保存在 Secured SharedPreferences 中?Jetpack Security 软件包仍处于 Beta 模式。

打开以获得更多说明。

0 投票
1 回答
349 浏览

android - 使用 jetpack EncryptedFile 安全性进行图像加密

google 推出security-crypto jetpack 库

我想使用这个库来加密图像文件,在库的文档中没有用于加密图像文件的示例。

我将图像转换为位图 - 位图转换为字节数组 - 然后使用库 如文档中所述,最终文件被加密,但是当文件被解码时,出现黑色图像我没有得到任何异常问题出在哪里?

}

我也将图像转换为base64(字符串)并使用该库但不起作用。

0 投票
0 回答
166 浏览

android - 使用 exoplayer 从 byte[] 播放音频,从 jetpack 安全文件加密解密

我已经从服务器下载文件并使用jetpack安全文件加密保存,加密和解密对于图像文件工作正常,但对于音频文件,我能够通过解密获得字节数组,但我无法使用exoplayer播放它。

加密类

我尝试通过以下方式播放音频:

此代码不播放音频,它说

他们有什么办法解决这个问题吗,我参考了Link

0 投票
0 回答
122 浏览

encryption - Android Keystore 和“设置”应用程序的“清除数据”操作是否相关?

我正在开发一个系统应用程序,我将一些敏感数据存储在 EncryptedSharedPreference 中。如果我清除 android Settings 应用程序的数据,我意识到我的应用程序无法按预期工作。发生这种情况是因为如果我尝试获取 EncryptedSharedPreferences 的实例,它会抛出 IOException。当我观察 encrypted_myapp_pref.xml 文件时,我可以看到该文件中存在所有加密值,并且该文件根本没有更改。

我读到 Jetpack Security 有两种类型的密钥 - 主密钥和子密钥:

MasterKey - 加密和解密所有子密钥,主密钥存储在 Android 密钥库中。 密钥 - 所有用户数据和所有数据 + 子密钥的加密和解密都以加密格式存储在 EncryptedSharedPreferences 本身中。

我的理论是:当我们对设置应用程序进行“清除数据”时,它也会清除 Android Keystore 实例。所有使用sharedUserId="android.uid.system" + EncryptedSharedPreferences. 但我没有找到任何支持我的理论的文件。

问题陈述:如果我们使用具有共享用户 ID 的系统应用程序并且如果我们清除设置应用程序的数据,在终止我们的应用程序并重新启动或设备重新启动时,我们的应用程序(任何系统应用程序)无法检索 EncryptedSharedPreferences 实例并失败带有 IOException。