Ads*_*Ads 4 java security authentication android
我有一个登录数据库,从我的Android客户端我必须以安全的方式传递密码.我想实现一个能够进行加密的登录屏幕.
如何在我的应用程序中实现安全加密?
Pat*_*ick 13
你想要完成它仍然有点模糊,因为我没有真正理解你所说的"能够进行加密的登录屏幕".
如果我理解正确,虽然我猜你想在你的应用程序中有一个用户需要通过的登录界面才能使用你的应用程序.有点像进入建筑物的门,还是栅栏?好吧,我不能确切地告诉你如何完成它,但也许可以启发一些问题.
用户输入他或她的用户名和密码,检查用户是否存在于数据库中,并将密码与数据库中的密码进行比较.
简单但不安全.在这种情况下,您需要以明文形式存储密码,这意味着其他人(让我们称之为邪恶的Eve)可以创建另一个应用程序,从数据库中读取并获取密码.
为了缓解这种情况,您可以哈希密码(最好使用盐).要散列字符串,请查看MessageDigest类,可以通过链接获得示例.现在,使用哈希意味着你(引用维基百科)
将大量可能可变大小的数据转换为小数据
即你获得的数据不是你给哈希函数的数据.哈希是一种快速的单向函数,因此一旦您对其进行哈希处理,您将无法获得实际密码.但是,没有问题,存储密码的哈希数据库,并比较散在登录时的密码.
这有点好于明文,邪恶的Eve可能从数据库中读取,但它不是她需要输入你的应用程序登录的密码.不要担心邪恶的夏娃,"我只会得到一张彩虹表 "她说,"并将我的彩虹表与数据库中的密码进行比较".
如此接近......好吧,为了减轻彩虹攻击你可以使用一个盐,换句话说,另一个值将添加到密码中,这将创建一个不同的哈希值.散列的美妙之处在于,您只需要添加少量额外数据,以使散列看起来几乎随机地与散列不同,而不需要额外的数据位.一个简单的盐可以是用户名,hash(username + password)而不是商店hash(password).现在,由于哈希计算速度很快,盐应该以某种方式隐藏.你怎么做完全取决于你,但你应该强调它的秘密.
邪恶的夏娃现在非常生气,但她可能只能找到你的盐,在这种情况下,她只是在她睡着时离开她的电脑,当她醒来时,她很可能会有一个破解密码.
由于散列函数很快,为什么不只是散列密码的散列,并且由于它们很快,为什么不散列密码散列的散列呢?嘿,虽然我们在这,但为什么不这样做呢.用户需要等多长时间才能登录?如果可以等一下,那么你可以在那一秒内完成多少次迭代?在这个stackoverflow线程中读取一些答案可能会给出一些理由,越多越好.将其与盐缓解相结合,应该非常可靠.
好吧,邪恶的夏娃现在将很难穿透你的登录界面,用盐和迭代来散列密码.
但请记住,你的防守与你最薄弱的环节一样强大!问自己这个,我想保护什么?我的登录屏幕会保护它吗?如果恶棍无法打破门,他们可能只是通过树篱!
如果要了解有关Java安全性的更多信息,可以阅读有关Java和加密体系结构中的安全性的更多信息.