看代码跟解释,不要问我为什么!!嘿嘿
<?php
# 和 hash 碰撞一样的 DES 加密碰撞?不同秘钥的同一明文的同一结果
$key_1 = "12345678";
$key_2 = "13245768";
$plain = "BookMoth~";
$encrpted = mcrypt_ecb(MCRYPT_DES,$key_1,$plain,MCRYPT_ENCRYPT);
// DES 用不同秘钥加密同一密文得同一明文;
if($plain == trim(mcrypt_ecb(MCRYPT_DES,$key_1,$encrpted,MCRYPT_DECRYPT))){
echo "key1 works~";
}
if($plain == trim(mcrypt_ecb(MCRYPT_DES,$key_2,$encrpted,MCRYPT_DECRYPT))){
echo "key_1 == key_2";
}
# 不同秘钥加密同一明文得同一密文;
echo mcrypt_ecb(MCRYPT_DES,$key_1,$plain,MCRYPT_ENCRYPT)==mcrypt_ecb(MCRYPT_DES,$key_2,$plain,MCRYPT_ENCRYPT);
/*
原因是:DES 秘钥采用,每字节取前七位为有效位,第八位为奇偶校验位,所以只要每字节去前七比特位一样,秘钥就是等效的;
就是说上面采用等效(或一样)的秘钥,所以你懂得
*/
?>