jul*_*lio 11 php ajax get mcrypt
我搞乱了一个简单的授权方案.我认为没有SSL或其他HTTP身份验证的最简单的方法是共享密钥加密.根据PHP手册中的一个简单示例,我想出了以下内容:
$text = "boggles the invisible monkey will rule the world";
$key = "This is a very secret key";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $text, MCRYPT_MODE_ECB, $iv);
$iv = base64_encode($iv);
$enc = base64_encode($enc);
echo '<a href="temp2.php?iv='.$iv.'&text='.$enc.'">link</a><br />';
Run Code Online (Sandbox Code Playgroud)
收到此请求的页面(temp2.php)如下所示:
$key = "This is a very secret key";
$iv = base64_decode($_GET["iv"]);
$enc = base64_decode($_GET["text"]);
$crypttext = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
echo "$crypttext<br>";
Run Code Online (Sandbox Code Playgroud)
这非常接近,但它没有正确解码 - 它回应
boggles the invisible monkey will rule t—;eôügJë
我不确定挂断是什么,我尝试了urlencode/urldecode和htmlentities,认为可能是一个字符在请求中被破坏了,但没有区别.
还有什么我想念的吗?也许填充?
谢谢
Cha*_*les 29
碰巧你的加密文本最终会看起来像:
Z5DlBqT8yEB4HKLkAlvfJoWaHgnNVLFh7jls6L85sLriedc82uFQxm+M62I41oB7
Run Code Online (Sandbox Code Playgroud)
看那里的加号?URL中的加号变为空格.
当手动将该加号转换为空格并解密结果时,输出就是您目睹的损坏的垃圾.
在将其粘贴到链接之前,您应该通过rawurlencode(而不是 urlencode)运行IV和加密文本.这将正确编码加号,这将通过该过程保留它.你不需要(也不应该)urldecode另一边的字符串 - PHP会为你完成这个.