tefrika dizisi ile md5 şifrelemek cookiedata

3 Cevap php

I was attempting to encrypt de cookie data with md5, but I can not validate the hash back.

Bu cookie_data is a serialized array, normal bir stringvalues ​​iş tamam çünkü gerçeği ile, ilgisi var.

It's actually from a codeigniter class, but it does not work?? Does anyone know what the problem might be?

$hash    = substr($session, strlen($session)-32); 
$session= substr($session, 0, strlen($session)-32); 

if ($hash !==  md5($session.$this->encrypt_key))
{........

ve çerez değeri, bu gibi şifreli

$cookie_data = $cookie_data.md5($cookie_data.$this->encrypt_key);

EDIT I found that the answer is to use urlencode en urldecode in the proces of creating and validate md5 hashes, because setcookie does urlencode automaticly, and thereby possibly changing the hash.

teşekkürler, Richard

3 Cevap

md5 tek yönlü bir işlevdir. Bu bir geri dönüşümlü bir değildir, bu yüzden verilerin şifresini çözemez.

Yapabileceğiniz tek şey, (Eğer başka bir yere kaydedilmişse) orijinal verileri şifrelemek ve bu ikinci hesaplama sonucunu kontrol etmektir.

Değer alınır ve hesaplanan yeni değer aynıysa (kodunuzu yapıyorsun gibi), alınan karma geçerlidir.

EDIT

Bu kod sadece üç satır ile bazı olası nedenleri tahmin edecek, biliyorum:

  1. $ Session kod cookie_data aynı değeri başında içermez.
  2. Eğer multibyte dizeleri kullanıyorsanız ve strlen -32) dize yük bölümünü almak için deyimler substr ($ session, 0, kullanmak (farkında mb değildir.
  3. belki substr explicitally mb_substr (ya da adı ne olursa olsun) kullanmak, çok baytlı dizeleri ile başa gelmez.

Benim için ilk vaka daha muhtemeldir. Ben görebiliyorum ne için.

Eğer bir yazım hatası var:

md5($sessie.$this->encrypt_key))

olmalıdır

md5($session.$this->encrypt_key))

Size açık bildirimler ile geliştirirseniz çok daha kolay bu tür bir şey yakalayacağız.

Sen encrypting veri, sen signing o değilsin.

I was attempting to encrypt de cookie data with md5, but I can not decrypt it back for validation.

md5 bir şifreleme yöntemi değildir. Bu orijinal veri geri döndü cant tek yönlü karma oluşturur.

Veri try mcrypt şifrelemek istiyorsanız