我一直在尝试在 PHP 中实现与 C 中完全相同的函数。但是,我还没有看到完全相同的结果。我认为问题在于我仍然不完全理解的“计数”或迭代。
函数定义:
int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
const unsigned char *salt, const unsigned char *data, int datal,
int count, unsigned char *key, unsigned char *iv)
下面是 C 函数实现的链接:evp_key.c.
这是我在 Stack Overflow 上找到的内容,很接近,但没有作者简要提到的“计数”:在 Cocoa 中加密数据,在 PHP 中解码。用户提供的关键行米兹蒂克延茨在这里:
$cipher = MCRYPT_TRIPLEDES;
$cipherMode = MCRYPT_MODE_CBC;
$keySize = mcrypt_get_key_size( $cipher, $cipherMode );
$ivSize = mcrypt_get_iv_size( $cipher, $cipherMode );
$rawKey = "ThisIsMyKey";
$genKeyData = '';
do
{
$genKeyData = $genKeyData.md5( $genKeyData.$rawKey, true );
} while( strlen( $genKeyData ) < ($keySize + $ivSize) );
$generatedKey = substr( $genKeyData, 0, $keySize );
$generatedIV = substr( $genKeyData, $keySize, $ivSize );
$output = mcrypt_decrypt( $cipher, $generatedKey, $encodedData, $cipherMode, $generatedIV );
echo "output (hex)" . bin2hex($output);`
但我仍然不知道“伯爵”会去哪里。
任何帮助是极大的赞赏。