2017-10-17 60 views
-4

通过看到this comment和评论here,在我脑海中提出的一个问题,那为什么我们不使用我们自己的PHP函数来保护密码在MySQL?我们应该使用PHP内置函数。像password_hash() & password_verify()PHP内置或MySQL用户定义函数密码

如果我自己做我该怎么办PHP函数

例如:

HI HOW ARE YOU?安全代码应该zq1zag1ewn1:a>!

我在函数中使用array

的代码是这样:

$txt = "HI HOW ARE YOU?"; 
$trans = array(" " => "1", "H" => "z", "C" => "f", "I" => "q", "O" => "a", "W" => "g", "A" => "e", "R" => "w", "E" => "n", "Y" => ":", "U" => ">", "?" => "!"); 
    $change = strtr($txt, $trans); 
    echo $change; 

我能否获得使用PHP in-built function,而不是我的函数的原因是什么?

+2

内置的现实世界的使用和运行良好的加密algorythms创建功能。你自己的加密功能可能缺乏这些非常重要的功能 –

+2

如果你自己的功能是加密密码,那么你会写一些可能非常不安全的东西....见证你说的是加密而不是散列,表明您对安全性了解不足以了解其差异 –

+2

至于示例代码,可以在几秒钟内打破简单的替换密码;甚至不像拿破仑的Vignere密码那样安全 –

回答

5

我可以得到使用PHP内置函数而不是我的函数的原因吗?

你的做法是可怕的不安全,而且会一直在通过甚至用手工作二战时期的密码破译专家破 - 可能使用类似frequency analysis。地狱,the ancient Romans (possibly even earlier, but they're the earliest documented) invented your fundamental technique

这就是为什么你不要roll your own crypto。你可能会搞砸了。你刚才已经证明,写一些看起来很安全的东西是多么容易,但是可能会被任何现代计算机以毫秒为单位打破。

如果你不是一个专家团队的密码专家,你的解决方案可能不是几十年历史,经过测试,同行评审的解决方案,从实际队专家的密码专家的一样好。

参见:

+0

(此外,一个简单的网络服务器配置错误可能会暴露您的PHP代码,这将给攻击者提供解密所有密码的方法。使用散列,源代码泄露*不会提供此功能。) – ceejayoz

+0

哪一个最好'password_hash ()'或'password_verify()'? –

+0

@Chiru你需要两个,他们做不同的事情。阅读文档。 – ceejayoz