Ben bu biçimde bir dize alır bir sınıf var:
000067000000000012620060324b38e2cab3353
, Dize daha sonra bir URL bir get değişken olarak ekler şifreler.
Şifreleme yapan sınıfı bu gibi bir işlevi vardır:
private function _code_encryption($enc_type,$a_string){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
if($enc_type == self::ENCRYPT_STRING){
//encrypt then return base64 encoded
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::AUTH_ENCRYPTION_KEY, $a_string, MCRYPT_MODE_CBC, $iv);
return base64_encode($encrypted);
}elseif($enc_type == self::DECRYPT_STRING){
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, self::AUTH_ENCRYPTION_KEY, base64_decode($a_string), MCRYPT_MODE_CBC, $iv);
return trim($decrypted);
}
}
Dize şifreli olduğunda ben değerini UrlEncode ve url "https://secure.mysite.com/index.php?action=someaction&transfer_code=XXXXX XXXX urlencoded şifreli dize olduğu gibi görünüyor gibi url ekleyin.
Url ayrıştırılır ve işlendiğinde Şimdi, $ _GET ['transfer_code'] değeri yukarıdaki _code_encryption işleve oluyor ancak doğru şekilde deşifre değer döndüren ve yerine benim tarayıcı render değil, bozuk karakter verir değildir. Ben şifreleme / şifre çözme için kullanabileceğiniz anahtar uzunluğu için bir şart var mı? Ben böyle bir şey denedim
$key = hash('sha256',self::AUTH_ENCRYPTION_KEY,true);
ama bu da işe yaramadı ...
Değişkenler olsun php man sayfaları devlet zaten urlencoded çünkü Ayrıca, ben $ _GET ['transfer_code'] değişkeni urlkodlamasig değilim ...
UTF-8 encryption/base64_encoding ÖNCE alfasayısal dize kodlayan, ya da hatta herhangi bir fark yaratacak olmalıdır?