2016-03-25 8 views
0

Я хочу зашифровать некоторые данные в моем php-файле, когда я добавляю материал в свою базу данных mysql.Как шифровать и расшифровывать данные в базе данных mysql с помощью php?

Вот как я это делаю.

создать статический ключ, как:

$key = md5("uJHyFVSG"); 

Тогда я две функции называются шифровать() и дешифрования(), и они делают это:

function encrypt($string, $key){ 
    $string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB))); 
    return $string; 
} 

function decrypt($string, $key){ 
    $string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($string), MCRYPT_MODE_ECB)); 
    return $string; 
} 

Я не уверен, если это но как я могу создать ключ, отличный от md5?

+0

Попробуйте использовать sha1 – Veniamin

+1

@Veniamin Это ужасная идея. –

ответ

1

В названии есть ключ: Rijndael 256 использует 256-битный шифр. Вы используете 64-битный ключ (на самом деле вы используете только 48 бит, но разбросаны по 64). Также вы можете подумать о другом месте, кроме исходного кода, для хранения ключа.

В вашей системе есть множество генераторов случайных чисел. Но вы не сказали, на какой ОС это работает, и на какие модули PHP установлены. Но поскольку вы уже используете mcrypt, вы можете использовать mcrypt_create_iv (256); (Подсказка: base64 закодировать значение, если вам нужно сохранить его как ASCII

+0

Спасибо за ваш комментарий, а что насчет openssl_encrypt() –

+1

'mcrytp_create_iv (256)' На самом деле вам там всего 32. –

+0

@ScottArciszewski:: $ спасибо – symcbean

5

Тогда я две функции под названием шифровать() и дешифрования()

Don't use the code in your question!

В самом деле, вернуться. где вы его нашли, и сказать им, что их код является небезопасным, и они не должны поощрять людей использовать его

создать статический ключ, как:.

$key = md5("uJHyFVSG"); 

Лучше идея: Use a library.

// Generate this once, then save it. 
$key = Crypto::createNewRandomKey(); 
/* 
    var_dump(Crypto::binToHex($key)); 
    // then later: 
    $key = Crypto::hexToBin("the generated hex characters go here"); 
*/ 

// To encrypt: 
$encrypted = Crypto::encrypt(
    "This is what you're trying to protect", 
    $key 
); 

// To decrypt: 
$plaintext = Crypto::decrypt(
    $encrypted, 
    $key 
); 

Библиотека связана выше (сделанный Taylor Хорнби) обеспечивает то, что называется Authenticated Encryption, который наряду со схемами AEAD (Зарегистрированным Шифрование с Associated данных) the only way anyone should be encrypting arbitrary data in 2016.

Вам не нужно даже особенно заботиться о том, что детали или любые другие, но в случае, если вы хотите знать, фрагмент кода:

  • Он использует ECB mode
  • Она использует Rijndael-256, not AES
  • Libmcrypt передает сообщения с \0 до тех пор, пока он не достигнет кратного размера блока, поэтому, если вы шифруете все, что может быть завершено, одним или несколькими байтами \0, подготовьтесь к потере данных при расшифровке своего сообщения.
  • Кроме того, rtrim() сожрут другие байты (\x20 особенно)

Кстати, все это было отвечено в общем here, here, here и here. В разделе «Контейнеры» уже есть своя информация о лучших методах шифрования на Stack Exchange, if you would only search for it.

 Смежные вопросы

  • Нет связанных вопросов^_^