【发布时间】:2011-07-06 18:45:28
【问题描述】:
问题是为什么 32 个字符的字符串在 C# .NET 中有效,但在 php mcrypt 中无效,以及如何使它们兼容? (我有一种使用 AES 的方法,3DES 保持打开状态。
我正在尝试创建一个密码学 api,它使用 Microsoft 在 .NET 中的 Crypto Api 和 PHP 的 mcrypt 来加密和解密数据。
C#应该可以加解密,PhP只需要解密。问题是我希望用户能够定义自己的密钥。为此,我对他们输入的密码进行了 md5 哈希处理。这在 C# 端完美运行,但在 PHP 中我得到了
警告:mcrypt_decrypt() [function.mcrypt-decrypt]:第 40 行 C:\xampp\htdocs\failcrypt\crypt.php 中的密钥大小对于该算法来说太大
(一个空的 "" 字符串应该可以工作,以及相当大的键。
我能找到的所有链接都有预设键,但我的必须适用于两边的任意键大小。
echo $key."</br>";
echo md5($key)."</br>";
$newKey = md5($key)."</br>";
echo strlen($newKey)."</br>";
$decrypted = mcrypt_decrypt(MCRYPT_3DES, md5($key), base64_decode($msg), MCRYPT_MODE_ECB);
echo $decrypted;
输出
红色(钥匙)
bda9643ac6601722a28f238714274da4(哈希)
【问题讨论】:
-
看起来在您运输钥匙时发生了一些事情。我会闻到一个编码问题,但是你写它是一个 MD5 散列,在传输时不应该有明显的编码问题。如何将密钥字符串从 c# 传递给 PHP?
-
@hakre 密钥现在可以硬编码,只是 php 和 c# 必须能够使用相同的密钥
-
嗯,你在问题中给出的 strlen 是错误的。我得到的是 32,而不是 37。?
-
您回显的 strlen 包括
<br /> 字符... -
是的,我没有注意到,但问题是如何在两边使用相同的字符串(键)。
标签: c# php cryptography