如何在安卓设备上存储密码

6
我希望了解Android密钥库,以便在设备上存储密码。(https://developer.android.com/training/articles/keystore.html)
在这篇文章中,它说“使用Android密钥库提供程序让单个应用程序存储自己的凭据,只有该应用程序本身才能访问。”这正是我想要的。
所以我认为这将是这样工作的: 1)我将生成RSA密钥
2)将PrivateKey存储在KeyStore中
3)将PublicKey存储在某些SharePrefs中
4)使用PublicKey加密密码
5)使用PrivateKey加密密码。
但是我认为我误解了一些东西,因为这篇文章没有显示:
1)如何将PrivateKey保存到KeyStore中(我没有看到任何API显示密钥库如何添加密钥)
2)不显示如何使用PrivateKey解密数据。
这篇文章为什么要讨论“使用KeyStore中的PrivateKey对某些数据创建签名”?什么是对数据创建签名?(我想使用PrivateKey解密数据)。为什么需要验证“之前由PrivateKey生成的签名”?
所以我现在很迷惑...这篇文章一开始让我走上了正确的道路,但到最后我不知道它想要实现什么。
有人能否建议一下我正在尝试做的事情是否有任何意义? 或者我应该只是将公钥和私钥保存在自己的数据库中?(那里的安全性不高,但考虑到在设备上存储密码的要求,这是我能做到的最好的。)
非常感谢!
问候!
1个回答

2
我在“使用内部存储”部分引用了这一行,来自http://developer.android.com/training/articles/security-tips.html。默认情况下,您在内部存储上创建的文件仅对您的应用程序可访问。这种保护由Android实现,对于大多数应用程序来说已经足够。
现在谈谈加密: 密钥库API处理数据的加密。密钥用于安全通信,而不是存储密码。密码通常是不可逆的哈希或映射。不需要解密,只需要匹配。
例如:如果您发送加密数据进行通信,则参与通信的其他方需要知道数据是什么,因此需要解密密钥。因此,如果您发送了“Hello I am Crypted”,接收方必须知道您发送了“Hello I am Crypted”作为消息。
对于密码,如果输入某个密码短语或密码键,它需要与存储的对应项匹配。例如,如果“pass123”作为“rdi#$$+!@/b”存储为您的密码,则当您输入密码时,通过检查算法进行处理后应该与存储的值匹配,这样您就被认证了,不需要生成“pass123”。
因此,对于您的应用程序,您可以使用某种机制(生成几乎唯一且不可逆的哈希)在输入密码时生成唯一的密钥/哈希,然后将其存储在您的应用程序数据中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接