我希望了解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"。签名"签名。
所以我在这一点上迷失了......这篇文章让我在正确的地方开始,但到最后我很困惑它想要实现的目标。
有人可以建议我尝试做的事情是否有意义? 或者我应该只在我自己的数据库中保存公钥和私钥? (那里没有太大的安全性,但鉴于在设备上存储密码的要求,我能做的最好)。
非常感谢
Rgds !!!!
答案 0 :(得分:2)
我在http://developer.android.com/training/articles/security-tips.html的使用内部存储空间部分引用此行 默认情况下,您在内部存储上创建的文件只能由您的应用访问。此保护由Android实现,足以满足大多数应用程序的需要。
现在关于加密: Keystore API正在处理数据加密。密钥用于安全通信,不用于存储密码。密码通常是不可逆的哈希或地图。并且不需要解密但只需要匹配。
例如:要进行通信,如果发送数据加密,其他参与通信的一方需要知道数据是什么,因此需要解密密钥。所以,如果你已发送"你好,我是加密的"收件人必须知道你已发送"你好我是加密的"作为消息。
对于密码,如果输入密码或密码,则需要与存储的密码匹配。喜欢if" pass123"您的密码是否存储为" rdi#$$ +!@ / b"然后当您通过检查算法进行处理时输入密码时,它应该与存储的值匹配,并且您经过身份验证后不需要生成" pass123"。
因此,对于您的应用程序,您可以使用某种机制(生成几乎唯一且不可逆的哈希)在输入密码时生成唯一键/哈希,然后将其存储在您的应用程序数据中。