【发布时间】:2025-12-21 23:05:12
【问题描述】:
我在尝试解密 C# 中的一些在 PHP 中加密的值时遇到了困难。 PHP 中的加密是通过以下方式完成的:
function encrypt($pure_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = 'fÔdñá1f¦';
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
$encrypted_string = base64_encode($encrypted_string);
return $encrypted_string;
}
由于使用了 ECB 模式,IV 可能没有使用它,但这仍然没有帮助。最大的问题是 PHP 文档太差了,并且没有指定函数使用什么编码!传递的字符串根据编码具有不同的字节值,最终加密(在本例中为 Blowfish)处理字节。
在不知道编码的情况下,我只是在我的 C# 代码中尝试不同的编码,但没有成功。在某处我读到 PHP 在内部使用“iso-8859-1”编码,但即使这样它也不起作用。
有没有人成功地在 C# 中解密了一些在 PHP 中使用愚蠢的函数 mcrypt_encrypt() 加密的值?
更新
我用 PHP 做了一个例子。代码:
define("ENCRYPTION_KEY", "1234asdf");
define("IV", "1#^ÊÁñÔ0");
$clearText = "abc";
function encrypt($pure_string, $encryption_key, $iv) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
$encrypted_string = base64_encode($encrypted_string);
return $encrypted_string;
}
$encrypted_string = encrypt($clearText, ENCRYPTION_KEY, IV);
echo "Key:" . ENCRYPTION_KEY . "<br />";
echo "IV:" . IV . "<br />";
echo "Clear Text:" . $clearText . "<br />";
echo "Encrypted Text:" . $encrypted_string . "<br />";
结果是:
Key:1234asdf
IV:1#^ÊÁñÔ0
Clear Text:abc
Encrypted Text:OiZ6QIdhXYk=
另外我确认没有使用IV,任何值我传递的结果都是一样的。
【问题讨论】:
-
由于
mcrypt已被弃用,由于在 PHP 7.2 中被删除,我可能会废弃它并重新开始...... -
看来这个帖子可以帮到你! *.com/questions/18681526/php-mcrypt-encrypt-to-net
-
您能否添加一个完整的示例(加密的 base64 文本、密码和原始纯文本)?
-
很多人都成功了 - 我每周至少会看到几次这个问题的变化(不是特别是河豚)。
-
@CD001 在 PHP 端使用什么我别无选择。我只能控制C#端
标签: c# php encryption cryptography blowfish