2015-05-14 70 views
6

我期待了解用于在设备上存储密码的Android密钥库。 (https://developer.android.com/training/articles/keystore.html如何在Android上存储密码

在本文中,它说“使用Android Keystore提供程序让单个应用程序存储自己的凭据,只有应用程序本身可以访问它。”这正是我想要的。

所以我觉得这会的工作方式是这样的: 1)我会生成一个RSA密钥

2)在密钥库

3存储的专用密钥)的一些SharePrefs存放公钥

4)使用公钥加密密码

5)使用私钥加密密码。

不过我想我误解的东西,因为这篇文章没有显示

1)如何专用密钥保存到密钥库(我没有看到显示密钥库如何添加关键任何API)

2)不显示如何使用PrivateKey解密数据

婴儿为什么本文讨论“在KeyStore中使用PrivateKey以通过某些数据创建签名”。对某些数据创建签名意味着什么? (我想用PrivateKey解密数据)。为什么它要验证“之前由PrivateKey进行的签名”。

所以我迷失在这一点......这篇文章开始了我在正确的地方,但最后我很困惑它试图实现什么。

有人可以建议,如果我试图做什么有意义吗? 或者我应该将公钥和私钥保存在我自己的数据库中? (在那里没有太多的安全性,但是如果要求在设备上存储密码,我可以做的最好)。

非常感谢

RGDS !!!!

回答

2

我从使用内部存储的http://developer.android.com/training/articles/security-tips.html 默认情况下,您在内部存储上创建文件只能访问到你的应用程序部分引用这条线。这种保护由Android实施,对于大多数应用程序而言已足够。

现在关于加密: Keystore API正在处理数据的加密。密钥用于安全通信,不用于存储密码。密码通常是不可逆的哈希或地图。并且不需要解密,但只需要匹配。

例如:要通信如果你发送数据加密对方参与通信需要知道什么数据是如此需要解密密钥。所以如果你发送了“你好,我是密码”接收者必须知道你发送了“你好我是密码”的消息。

对于密码,如果您输入一些密码或密钥,它需要与存储的对应物相匹配。就像“pass123”是你的密码存储为“rdi#$$ +!@/b“,那么当你输入一个密码的时候,通过检查算法来处理它应该与存储的值相匹配,并且你被认证了,它不需要生成”pass123“

因此,对于你的应用你可以使用一些机制它会生成几乎唯一且不可逆的散列),以在输入密码时生成唯一的密钥/散列,然后将其存储在您的应用数据中。