【发布时间】:2014-04-08 20:24:09
【问题描述】:
我想我在漩涡中的密码加密方面可能有点矫枉过正。
这就是盐生成代码的作用,一步一步
-
生成一个长度为10的伪随机字符串,它有这些可能的值:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
一个真正的从-2到123的随机数是由大气噪声产生的
- 此伪随机字符串和完全随机数与 unix 时间戳一起打乱。
- 然后使用 md5 对该预加盐进行加密。
这只是盐的生成,我也在漩涡中加密了整个东西
hash( 'whirlpool',$salt.$password);
我的代码中是否存在安全漏洞?我应该在它们加入之前还是之后对值进行 md5 散列?
这是我要检查的代码...
<?php
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
function get_true_random_number($min = 1, $max = 100) {
$max = ((int) $max >= 1) ? (int) $max : 100;
$min = ((int) $min < $max) ? (int) $min : 1;
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => '',
CURLOPT_USERAGENT => 'PHP',
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
);
$ch = curl_init('http://www.random.org/integers/?num=1&min='
. $min . '&max=' . $max . '&col=1&base=10&format=plain&rnd=new');
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
curl_close($ch);
if(is_numeric($content)) {
return trim($content);
} else {
return rand(-10,127); //INCASE RANDOM.ORG returns a server busy error
}
}
function generateSalt() {
$string = generateRandomString(10);
$int = get_true_random_number(-2,123);
$shuffled_mixture = str_shuffle(Time().$int.$string);
return $salt = md5($shuffled_mixture);
}
echo generateSalt();
?>
另外,盐应该多长时间?我个人认为散列其他类型的字符并不那么重要,因为没有人暴力破解整个 salt,我不这么认为。就这样!提前致谢。此外,任何更好或更有效的方法都会有所帮助。
【问题讨论】:
-
没有比杀戮更过分的杀戮。
-
不错的一个:P 我感觉从大气噪声中生成数字非常有效。
-
你用什么样的设备来消除大气噪音?
-
random.org 提供这个。
-
如果您想要比当前脚本运行得更快的任何东西,您可以只依赖操作系统的熵,而不是使用此 Web 服务。
标签: php security encryption hash whirlpool