作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
哈希算法有很多,我们以MD5为例。首先MD5算法会对消息进行分组,每组64字节,不足64字节的部分用padding补齐。padding的规则是,在最末一个字节之后补充0x80,其余的部分填充为0x00,padding最后的8字节用来表示需要哈希的消息长度。在对消息进行分组以及padding后,MD5算法开始依次对每组消息进行压缩,经过64轮数学变换。上一次压缩的结果,将作为下一次压缩的输入。
长度扩展攻击的理论基础,就是将已知的压缩后的结果,直接拿过来作为新的压缩输入。在这个过程中,只需要上一次压缩后的结果,而不需要知道原来的消息内容是什么。
为了避免潜在的安全隐患,在Drupal7中,我们不应该在代码中使用md5() 和sha1()函数,而应该使用更加安全的drupal_hash_base64()、drupal_hmac_base64()。
function drupal_hash_base64($data) {
$hash = base64_encode(hash('sha256', $data, TRUE));
// Modify the hash so it's safe to use in URLs.
return strtr($hash, array('+' => '-', '/' => '_', '=' => ''));
}
drupal_hash_base64使用了sha256算法,并使用base64进行编码,最后对哈希值作了字符替换,确保在URL中的安全性。