我正在开发一个基于 Web 和客户端应用程序的系统;客户端借助 PHP 和 Http 请求在服务器中进行所有数据库查询。Web 系统使用 PHP/Mysql 开发,安装在 PC 上的客户端应用程序使用 C# 开发。
好的!在一个阶段,客户端必须通过登录来识别用户,这看起来像是一项简单的任务,但是服务器 IP 可以通过应用程序配置部分进行更改。考虑到这一点,任何邪恶的人都可以通过输入邪恶的服务器 IP 地址然后窃取密码来进行网络钓鱼,问题是,我不会以文本/纯文本的形式从客户端发送密码。
现在我正在使用 md5 进行密码散列(没有盐,只是纯散列),我只使用它来将密码存储在数据库中。
读了一会儿,我意识到人们不再推荐使用 md5,而是使用 sha256 或更高版本,我正在考虑迁移到更好的哈希算法并创建自己的 salt。
据我所知,盐只是您添加到哈希中的随机文本,但我认为这不是最好的选择,所以我在想一些事情:
由于散列基于固定长度(32、64 等,取决于算法)的小写十六进制值,因此我可以使用散列中每个字符的每个 ASCII 码和加载的固定值的总和来玩列表(数组)例如:
我有:abcd
每个字母的 ASCII 码:
一个-> 97
b -> 98
c -> 99
d -> 100
然后我像这样对列表的固定值求和(长度为 32 / 64 个整数)
a -> 97 + 5 = 102 => f
b -> 98 + 2 = 100 => d
c -> 99 + 7 = 106 => j
d -> 100 + 3 = 103 => g
所以结果将是:fdje 替换了 abcd 的散列。
我不知道它有多安全,黑客确定我使用的技术有多困难,问题是结果与哈希具有相同的长度,并且更难确定盐,所以如果 FOR历史上的任何原因,黑客使用彩虹表并捕捉到可能的结果,这将是错误的。你怎么看待这件事?
谢谢...