PHP - mcrypt şifreli bir dize neler kodlama kullanıyor?

3 Cevap php

Ben denemek ve geri deşifre olamaz bu yüzden geri düzgün dönüştürülür almaz şifre metne dönüştürmek zaman ikili içine mcrypt tarafından oluşturulan şifre metin dönüştürmek çalışıyorum ama PHP kullanarak. Ben kodlamaları yere kadar berbat alıyorsanız varsayarak yaşıyorum ama nerede bunu anlamaya başlamak için bilmiyorum. İşte sitenin http://dev.hersha.me/str2bin.php için bir link ve burada benim kodudur.

<?php

class phpSteg {

function bin2bstr($input) {
    if (!is_string($input)) return null;
    return pack('H*', base_convert($input, 2, 16)); 
}

function bstr2bin($input) {
    if (!is_string($input)) return null;
    $value = unpack('H*', $input);
    return base_convert($value[1], 16, 2);
}


};

$steg = new phpSteg();

//echo $steg->bstr2bin('OMG') . "\n <br \>";
//echo $steg->bin2bstr('010011110100110101000111') . "\n <br \>";
$hash =  hash('md5',"OMGZWTF");
echo $hash . "\n <br \>";
$message = "OMG WTF BBQ";

$text = $message;
$key = $hash;

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
echo $iv . "\n <br \>";
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);

$binenc = $steg->bstr2bin($encrypted);

$bstrenc = $steg->bin2bstr($binenc);


$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $bstrenc, MCRYPT_MODE_CFB, $iv);
echo "Cipher Text : " . $encrypted . "\n <br \>";

echo "Cipher Text (binary) : " . $binenc . "\n <br \>";

echo "Cipher Text (back from binary) : " . $bstrenc . "\n <br \>";

echo "Decryption : " . $decrypted; // The quick brown fox jumps over the lazy dog

?>

Herhangi bir fikir?

3 Cevap

Tüm konular çözüldü.

Birincisi: Ben base_convert işlevini aşırı. Küçük veri seti gerekli.

İkincisi: Oldukça basit ve bariz gerçekten, base_convert böylece dönüştürme onları geri eklemek zorunda önde gelen sıfırları sayar.

Bin2bstr ve bstr2bin kullanarak rahatsız etmeyin. Eğer bir yerde (bir veritabanı gibi) dizesini depolamak gerekiyorsa, sadece base64 kodlama / şifreleme sonra dize çözmek.

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);

$binenc = base64_encode($encrypted);

$bstrenc = base64_decode($binenc);

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $bstrenc, MCRYPT_MODE_CFB, $iv);

Şifreleyerek önce ikili dize base64_encode deneyin ve deşifre oluyor sonra base64_decode kullanın. Mcrypt size haber vermeden, aksi halde veri boğulma olabilir.