PHP mycrypt sorun, tuhaf karakterler / uyarılar

2 Cevap php

Ben yanlış ne yapıyorum hiçbir fikrim yok. Ben sadece şifrelemek ve tuhaf karakterleri veya uyarı almadan şifresini gerekiyor. O ben 9 uzunluğu kullanıyorum ama "0123456789ABCDEF" 16 karakter uzunluğunda 16 IV'ye kullanılarak ve o olmam gerekiyordu diyor.

Uyarı: mcrypt_generic_init () [function.mcrypt-generic-init]: Yanlış Iv büyüklüğü; verilen uzunluğu: 9, gerekli: 16 in / home / mcondiff / public_html / projects / enk / enc.php 10 hattı üzerine

Bkz http://www.teamconcept.org/projects/enc/enc.php

Ben, kayıp şaşkın, biraz sersemleyebilir ediyorum. İşte buradan nereye gideceğiz? Ben bu şifreleme kullanmak ve bir proje için çalışan almak zorunda.

<?php

class enc
{
    function encrypt($str, $key) {
    	$key = $this->hex2bin($key);

    	$td = mcrypt_module_open("rijndael-128", "", "cbc", "fedcba9876543210");

    	mcrypt_generic_init($td, $key, CIPHER_IV);
    	$encrypted = mcrypt_generic($td, $str);

    	mcrypt_generic_deinit($td);
    	mcrypt_module_close($td);

    	return bin2hex($encrypted);
    }

    function decrypt($code, $key) {
    	$key = $this->hex2bin($key);
    	$code = $this->hex2bin($code);

    	$td = mcrypt_module_open("rijndael-128", "", "cbc", "fedcba9876543210");

    	mcrypt_generic_init($td, $key, CIPHER_IV);
    	$decrypted = mdecrypt_generic($td, $code);

    	mcrypt_generic_deinit($td);
    	mcrypt_module_close($td);

    	return utf8_encode(trim($decrypted));
    }

    function hex2bin($hexdata) {
    	$bindata = "";

    	for ($i = 0; $i < strlen($hexdata); $i += 2) {
    		$bindata .= chr(hexdec(substr($hexdata, $i, 2)));
    	}

    	return $bindata;
    }

}

$theEncryption = new enc();
$user = "John Doe";
$email = "john@example.com";
$user = $theEncryption->encrypt($user, "0123456789abcdef");

$email = $theEncryption->encrypt($email, "0123456789abcdef");

echo 'User: '.$user;
echo 'Email: '.$email;

?>

Somone bana doğru yönde işaret ya da ben yanlış yapıyorum ne işaret edebilir?

Teşekkürler

Mikrofon

2 Cevap

CIPHER_IV muhtemelen tanımlanmamış bir sabittir. PHP haber bir "tanımsız sabit Kullanımı" yükselten ve sonra dize olarak "sabit" kullanır. Dizesi "CIPHER_IV" 9 karakterden uzun.

Php dosyasında, CIPHER_IV bir baskı yapmak ve ne içerdiği görmek.

http://us2.php.net/mcrypt_generic_init özelliklerini görün

Muhtemelen bir blog kodu kopyalayıp yapıştırdım: Googling mcrypt_generic_init CIPHER_IV sadece bu yazı ve bir blog verir ;)

IV, işlevine belirtmek için gereken bir parametre değil, bir sabit olduğunu, ikinci blogger yazı misinterpreting koymak ilk blogger.

http://propaso.com/blog/?cat=6, onlar bu beyan at:

$secret_key = "01234567890abcde";
$iv         = "fedcba9876543210";

ve sonra yapın:

mcrypt_generic_init($td, $secret_key, $iv);

Sadece o zaman kullanın, sizin IV şey olmalı beyan ederim.