Tôi đang rối tung với một lược đồ ủy quyền đơn giản. Tôi nghĩ cách dễ nhất để thực hiện điều đó mà không cần SSL hoặc xác thực HTTP khác sẽ là mã hóa khóa được chia sẻ. Thích ứng với một ví dụ đơn giản từ hướng dẫn PHP, tôi đã đưa ra như sau:Gửi chuỗi mã hóa được mã hóa qua thông số URL - văn bản được giải mã bị cắt xén
$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 />';
Trang tiếp nhận yêu cầu này (temp2.php) trông như thế này:
$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>";
này được rất gần, nhưng nó không giải mã properly-- nó vang
boggles the invisible monkey will rule t—;eôügJë
tôi không chắc chắn những gì mà gác máy là, tôi đã cố gắng urlencode/urldecode và htmlentities, nghĩ có lẽ một char acter bị xáo trộn trong yêu cầu, nhưng không có sự khác biệt.
Tôi còn thiếu cái gì khác không? Có lẽ đệm?
Cảm ơn
Chuỗi Base64 thường kết thúc bằng '=' char. Tôi đặt cược you'r mất một trong khi phân tích cú pháp URL (vì = là một cái gì đó của một char đặc biệt). Thử 'urlencode (base64_encode())'? –
Plus, bạn nên đăng dữ liệu này, vì có giới hạn về kích thước của chuỗi nhận được (nó ở trên đó trong các máy chủ hiện đại, nhưng chúng tồn tại) – ircmaxell
@Frank Farmer-- Tôi đã thử tuyến đường url/giải mã. Không giúp được gì. @ ircmaxwell-- bạn nói đúng, nhưng đây là một chuỗi khá nhỏ ban đầu. – julio