You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KivyMD应用目录外安全存储账号与密码以避免更新丢失

解决方案
  • 用Android Keystore加密后存外部存储
    这是安卓官方推荐的敏感信息存储方案,密钥会被系统托管(支持硬件加密的设备会存在安全模块里,无法导出),能最大化保障安全性。
    操作步骤:

    1. 在Keystore中生成专属密钥对
    2. 用公钥加密账号密码明文
    3. 将加密后的内容写入外部存储的应用专属目录(比如Context.getExternalFilesDir(null),这个目录更新应用不会被清空,卸载才会删除)
    4. 读取时用私钥解密还原明文
      简化代码示例:
    // 生成Keystore密钥对
    val keyPairGen = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore")
    val spec = KeyGenParameterSpec.Builder(
        "app_secure_key",
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    ).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .build()
    keyPairGen.initialize(spec)
    val keyPair = keyPairGen.generateKeyPair()
    
    // 加密账号密码
    val cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding")
    cipher.init(Cipher.ENCRYPT_MODE, keyPair.public)
    val encryptedContent = cipher.doFinal("user:pass123".toByteArray(Charsets.UTF_8))
    
    // 写入外部存储专属目录
    val secureFile = File(context.getExternalFilesDir(null), "secure_data")
    FileOutputStream(secureFile).use { it.write(encryptedContent) }
    
  • 加密后存SharedPreferences
    SharedPreferences默认存储在应用私有目录,应用更新不会丢失数据,但默认是明文。可以用Keystore加密账号密码后再存入,避免明文泄露。这种方式不用处理外部存储权限,适合不想碰文件操作的场景。

  • 加密Room数据库
    用Room框架创建本地数据库,搭配SQLCipher给数据库加密,把数据库文件放在应用专属外部目录。既利用数据库的结构化存储优势,又通过加密保障数据安全,更新应用后数据不会丢失。

注意事项

  • 外部存储文件要设置私有权限,禁止其他应用访问
  • 绝对不能明文存储账号密码,所有敏感内容必须加密后再保存
  • 安卓10及以上优先用应用专属外部目录,避免动态存储权限申请

内容的提问来源于stack exchange,提问作者dheeraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:33:17