我知道这是一个话题,但我想具体询问我的应用程序。还值得一提的是,我对PHP相当陌生,并且一直在学习。PHP CRUD应用程序,密码拥有
所以我写了一个看似基本的CRUD应用程序,使用PHP和MySQL。我所有的代码都使用mysqli_ *,并且尽可能地使用最佳实践。我所做的一件事是,大多数人都皱眉,用MD5
来密码。我认为我理解使用SHA1的目的,因为它应该比MD5需要更多的周期来散列/散开,盐应该防止使用彩虹表。 bcrypt
是一种较新的散列算法,需要比SHA1更多的CPU周期。至少我认为这就是一切。
这是我的理解,你散列/盐密码,所以如果有人获得访问您的数据库中的用户表,他们没有看到你的用户密码在纯文本。对?
由于我的应用程序是一个基本的CRUD系统(针对小企业的库存跟踪,具有多个用户和可定义的位置),如果有人要访问我的用户表并查看这些MD5哈希,他们可以很容易地将其反转为可读密码并登录到我的系统中。但是,如果他们可以访问我的数据库并查看我的用户表,那么他们可以轻松地查看我的库存表,产品表和数据库中的所有其他表,无需登录到应用程序即可获取数据。目前,我的Web服务器有PHPMyAdmin和Webmin(带有MySQL模块),所以如果他们能够访问其中的任何一个,他们可以看到数据库中的数据,而不用担心登录系统本身。
考虑到这一点,在这种情况下最好的做法是什么?我的网络服务器已经具有典型的安全性,比如阻止root SSH访问,iptables等,但就密码散列而言,我是否应该打扰升级我的代码以使用bcrypt
而不是MD5
?是否升级到使用bcyrpt
从MD5
一个简单的过程,或者我将不得不重新设计我的登录系统是如何工作的?
谢谢!
这看起来并不困难,但是'crypt()'与'bcrypt()'相同吗?相似之处?对于它的价值,我使用PHP-FPM 5.4.x. 另外,为什么downvote? – dhorn
Downvote不是来自我,所以我不知道。实际上,PHP在5.5之前没有bcrypt实现,其中引入了'password_hash()'。但是你可以使用带'crypt'的'blowfish'编码算法。提供的详细信息@ PHP.NET – Eternal1
像这样使用的crypt函数将计算无信息的DES散列,并且对散列密码非常不安全。 – martinstoeckli