我正在制作一个带有客户端 - 服务器架构的多人游戏,我想知道为记录部分散列密码的确切过程是什么。玩家第一次登录时,是否应该通过网络发送密码,然后让服务器对其进行哈希处理(并存储哈希值)?如果是这样,哈希的现代推荐是什么(MD5,SHA等),我该如何用Java实现呢?
答案 0 :(得分:0)
由于“雪崩效应”,散列甚至微小不同的字符串会产生大不相同的散列。您无法从哈希中预测密码,也无法选择与哈希匹配的密码,除非是MD5等破碎的算法。
不应使用MD5和SHA1。
替代方案包括SHA256,SHA384和SHA512等标准,像Whirlpool这样的古怪标准,以及PBKDF2等多级标准。 SHA作为哈希计算起来相当容易(计算哈希的速度越慢,bruteforce的速度就越慢)。 PBKDF要慢得多(如果我没有记错的话,大约可能是1000次哈希/秒),但对于暴力来说同样慢。
如果密码被传输,如果正在使用流氓服务器或网络嗅探器,则不安全。我建议对密码进行哈希处理,通过网络发送密码,然后在服务器端再次对其进行哈希处理,最好是每台服务器使用一次盐。如果初始哈希是使用与密码连接的用户名计算的,那么对安全性来说同样不错。
因此,如果H(X)是X的散列,将发生以下情况: