|
|
1
13
它仍然有点含糊,你想要完成什么,因为我不真正明白你所说的“登录屏幕,它可以做加密”。 如果我理解正确的话,尽管我猜您希望在您的应用程序中有一个登录屏幕,您的用户需要通过该屏幕才能使用您的应用程序。有点像进入建筑物的门,或者栅栏?好吧,我不能确切地告诉你如何完成它,但可能会启发一些问题。 第一次尝试纯文本FTW,还是?用户输入其用户名和密码,检查数据库中是否存在用户,并将密码与数据库中的密码进行比较。 简单,但不那么安全。在这种情况下,您需要以明文存储密码,这意味着其他人( 我们叫她邪恶的夏娃吧 )可以创建另一个应用程序,从数据库中读取并获取密码。 缓解步骤1“散列为了缓解这种情况,你可以 hash 您的密码(最好用盐)。要散列字符串,请查看 MessageDigest 类,通过链接提供了一个示例。现在,使用hash意味着你(引用维基百科)
也就是说,你得到了一些数据,而不是你给出的散列函数。散列是一种快速, 单向函数 所以,一旦散列了密码,就不会再得到实际的密码。但没问题,将密码的散列存储在数据库中,并比较 搞砸 登录时的密码。 这比纯文本要好一些,Evil可能从数据库中读取数据,但这不是她登录应用程序时需要输入的密码。不用担心邪恶的夏娃,“我会得到一个 Rainbow table “她说,”然后将我的彩虹表与数据库中的密码进行比较。 缓解步骤2用盐散列
这么近…为了减轻
rainbow attack
您可以使用salt,也就是说,添加到密码的另一个值将创建不同的哈希。散列的好处在于,您只需要添加少量的额外数据,就可以使散列看起来与没有额外数据位的散列几乎是随机的不同。一个简单的salt可以是用户名,store
邪恶的夏娃现在很生气,但是她 可以 只要能找到你的盐,在这种情况下,她只是让她的电脑运行时,她睡着了,当她醒来时,她很可能有一个破解密码。 缓解步骤3迭代是你的朋友既然散列函数很快,为什么不只是散列密码的散列,既然它们很快,为什么不散列密码的散列呢?嘿,当我们在做的时候,为什么不这样做呢? 用户应该多长时间 有 要在登录前等待吗? 如果可以等待一秒钟,那么您可以在那一秒钟内完成多少次迭代?阅读一些答案 this stackoverflow thread 可能会给你一些理由,越开心。再加上盐的减少,它应该是相当坚实的。 好吧,邪恶的夏娃现在很难进入你的登录屏幕,用盐和迭代来散列密码。 其他问题但是记住, 你的防守和你最薄弱的环节一样强大! 问问你自己,我想保护什么?我的登录屏幕会保护它吗?如果坏人不能破门而入, they might just go through the hedge ! 你可以阅读更多关于 security in Java 以及 Cryptography Architecture 如果你想了解更多关于爪哇的安全问题。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |