android官方的加密库-security

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: android官方的加密库-security

概览


Security 库提供了与读取和写入静态数据以及密钥创建和验证相关的安全最佳做法的实现。

该库使用构建器模式为以下安全等级提供安全的默认设置:

  • 在可靠加密和良好性能之间取得平衡的强安全性这种安全等级适用于银行应用和聊天应用等消费者应用,以及执行证书吊销检查的企业应用。
  • 最高安全性这种安全等级适用于需要由硬件支持的密钥库和需要用户介入以提供密钥访问权限的应用。


秘钥管理


  • Security库可以使用多个秘钥集,可以对文件和sp进行加密。秘钥集被存储在sp中
  • 主秘钥被存储在系统秘钥库中


Security加密操作


依赖

使用Security库需要导入以下依赖

implementation("androidx.security:security-crypto:1.0.0")
    implementation("androidx.security:security-identity-credential:1.0.0-alpha02")
    implementation("androidx.security:security-app-authenticator:1.0.0-alpha02")
    androidTestImplementation("androidx.security:security-app-authenticator:1.0.0-alpha01")
复制代码


存在的问题

Security库支持的最低api版本是24,我们有以下两种方式解决:

  • manifest中声明<uses-sdk tools:overrideLibrary="androidx.security.identity.credential,androidx.security" />
  • 提升最低api版本为24,不过这样就需要对高于api24和低于api24两种情况分别做适配了


使用Security进行文件加密操作

写入加密数据

无法重复写入

当要写入的文件已经存在时,重复写入数据的时候openFileOutput方法会抛出异常,原因就是无法重复写入,见注释:

image.png


写入数据:

  1. 代码
  • 本例代码中EncryptedFile.Builder的构建耗时最长,在我的手机上能达到300-600ms的水平,所以非敏感的文件尽量不要用到加密
  • 另外存储进文件的数据膨胀也很大,这意味着占用了更大的存储空间
val encrypt = EncryptedFile.Builder(
                    getFile("安安安安卓写入文件加密数据.txt").apply {
                        if (exists()) {//如果已存在就先删除文件
                            delete()
                        }
                    },
                    this@MainActivity,
                    "随便写个key",
                    EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
                ).build()
                startRecord()
                encrypt.openFileOutput().apply {
                    write("随便写入点字符串".toByteArray(charset = Charsets.UTF_8))
                    flush()
                    close()
                }
复制代码


  1. 效果

image.png


读取加密数据

val encrypt = EncryptedFile.Builder(
                    getFile(
                        "安安安安卓写入文件加密数据.txt"
                    ),
                    this@MainActivity,
                    "随便写个key",
                    EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
                ).build()
                startRecord()
                val bytes = BufferedInputStream(encrypt.openFileInput()).readBytes()
                val result = String(bytes, charset = Charsets.UTF_8)
复制代码


使用Security进行SharePreference进行加密操作

Security库提供了EncryptedSharedPreferences对存入sp的key-value进行加密

不过众所周知的sp是个坑爹的东西,所以仍然只应该把EncryptedSharedPreferences运用到敏感的数据存储上


写入数据到Shar

share = EncryptedSharedPreferences.create(
            "encryptdata",
            "key",
            this@MainActivity,
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
        )
 share.edit().let {
                    it.putString("key", "SharePreference数据")
                    it.apply()
                }
复制代码


从SharePreference读取数据

share = EncryptedSharedPreferences.create(
            "encryptdata",
            "key",
            this@MainActivity,
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
        )
val value = share.getString("key", "")



相关文章
|
18天前
|
算法 安全 数据安全/隐私保护
Crypto++库支持多种加密算法
【10月更文挑战第29天】Crypto++库支持多种加密算法
52 4
|
3月前
|
存储 算法 数据库
使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
`hashlib` 是 Python 中用于实现哈希功能的模块,它可以将任意长度的输入通过哈希算法转换为固定长度的输出,即散列值。该模块主要用于字符串加密,例如将用户名和密码转换为不可逆的散列值存储,从而提高安全性。`hashlib` 提供了多种哈希算法,如 `md5`、`sha1`、`sha256` 等。
60 1
|
30天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
24 1
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
85 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
3月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
333 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
3月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
371 1
|
3月前
|
Ubuntu Linux 数据安全/隐私保护
使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。
151 2
|
3月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
135 1
|
3月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点展示了如何使用 Kotlin 实现 AES-256 的加密和解密,提供了详细的代码示例。
77 2
下一篇
无影云桌面