我已经在PHP中实现了RC4密码(它看起来与http://pear.php.net/package/Crypt_RC42几乎相同)。
但是,我想介绍(http://en.wikipedia.org/wiki/RC4#Fluhrer.2C_Mantin_and_Shamir_attack)中提到的“Drop-N”方法。
有没有一种简单的方法可以根据我上面使用的Class来实现它?
答案 0 :(得分:1)
您需要做的就是在加密(或解密)之前将 n 字节数据添加到明文(或密文)的开头。
这些字节包含的内容并不重要,只要它们有 n 即可。然后丢弃加密(解密)数据的第一个 n 字节。使用不同的填充字节进行加密和解密将没有任何区别。
或换句话说:
$define('DROP_N_PADDING_LENGTH',512); // (or whatever)
$message = "Hello, world!";
// encrypt:
$ciphertext = $rc4->encrypt(str_repeat(" ",DROP_N_PADDING_LENGTH) . $message);
$ciphertext = substr($ciphertext,DROP_N_PADDING_LENGTH);
// decrypt:
$plaintext = $rc4->decrypt(str_repeat(" ",DROP_N_PADDING_LENGTH) . $ciphertext);
$plaintext = substr($plaintext,DROP_N_PADDING_LENGTH);