首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用密码技术安全存储数据

利用密码技术安全存储数据
EN

Stack Overflow用户
提问于 2013-02-23 22:56:28
回答 1查看 851关注 0票数 1

背景

根据一篇新的Android开发人员博客文章(可用的here),您应该使用一种新的技术来加密和解密存储在数据库或sharedPreferences中的敏感数据(例如密码),以便即使具有根权限的人也很难读取它。

新的方法是:

代码语言:javascript
复制
public static SecretKey generateKey() throws NoSuchAlgorithmException {
    // Generate a 256-bit key
    final int outputKeyLength = 256;

    SecureRandom secureRandom = new SecureRandom();
    // Do *not* seed secureRandom! Automatically seeded from system entropy.
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    keyGenerator.init(outputKeyLength, secureRandom);
    SecretKey key = keyGenerator.generateKey();
    return key;
}

问题

根据这篇文章(以及我尝试过的内容),这段代码每次调用它时都会创建一个新的不同的键,因此我有一些关于这个问题的问题:

  1. 对于旧版本的Android,应用程序会做些什么?
  2. 这些应用程序将如何处理将android操作系统更新到它应该工作的新方式(API post 17到API 17)?
  3. 因为它不是确定性的,它意味着解密不能重新创建相同的密钥,那么它是否意味着密钥也被存储以便用于解密(以及以后的加密)?难道这样的事不就错过了整个重点吗?
  4. 假设我拥有由代码生成的密钥,我将如何使用它来加密和解密来自DB和sharedPreferences的数据?
  5. 他们在文章中说:

事实上,Android现有的安全模型已经为这类数据提供了大量的保护。用户凭据应使用设置的MODE_PRIVATE标志存储,并存储在内部存储中。

什么意思?并不需要整个密钥生成,因为Android已经加密了一切?我的设备是有根根的,我可以很容易地说,数据从来没有加密过,而且易于读取(特别是sharedPreferences,它仅仅是xml)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 01:55:07

对于旧版本的android,应用程序会做些什么?

不是这样的,因为它在所有版本的Android上都是无用的,正如博客文章所指出的。

因为它不是确定性的,它意味着解密不能重新创建相同的密钥,那么它是否意味着密钥也被存储以便用于解密(以及以后的加密)?难道这样的事不就错过了整个重点吗?

确切地说。引用博客文章的话说:“请注意,这种方法的安全性依赖于保护生成的密钥,这是基于内部存储的安全性的。将目标文件保持未加密(但设置为MODE_PRIVATE)将提供类似的安全性。”

老实说,我不知道为什么这篇博文是这样写的。唯一具有重要价值的加密形式是用户提供密码(或高级形式的密码,如双因素身份验证)。

什么意思?并不需要整个密钥生成,因为android已经加密了一切?

不,这意味着任何能够访问加密文件的人也可以访问加密密钥,这使得加密基本上没有意义。

请注意,Android将在用户打开全磁盘加密的设备上“对所有内容进行加密”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15046686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档