Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Enkripsi dengan PHP Mcrypt dan Dekripsi dengan MySQL aes_decrypt?

Saya menemukan bantuan yang bagus di sini

Perhatikan bahwa ini berfungsi untuk teks terenkripsi hingga 65519 karakter dalam teks biasa. (mungkin sedikit lebih banyak jika tidak ada penyandian UTF-8)

Kode PHP untuk mengenkripsi:

// MySQL uses 16 bytes key for 128 encryption/decryption
$key = "ABCDEF0123456789";

$plaintext = "This string was AES-128 / EBC / ZeroBytePadding encrypted.";
// Optionally UTF-8 encode
$plaintext_utf8 = utf8_encode($plaintext);
// Find out what's your padding
$pad_len = 16 - (strlen($plaintext_utf8) % 16);
// Padd your text
$plaintext_utf8 = str_pad($plaintext_utf8, (16 * (floor(strlen($plaintext_utf8) / 16) + 1)), chr($pad_len));

// Encryption
mt_srand();
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
mcrypt_generic_init($td, $key, false);
// Generates a warning about empty IV but it's Ok
$ciphertext = mcrypt_generic($td, $plaintext_utf8);
mcrypt_generic_deinit($td);
$ciphertext = mysql_real_escape_string($ciphertext);

// Store in MySQL
$mysqli = new mysqli("localhost", "test", "test", "test");
$mysqli->set_charset("utf8");
$mysqli->query("insert into test(content) value ('$ciphertext')");
$mysqli->close();

Permintaan SQL untuk mencari string was :

SELECT CAST(AES_DECRYPT(content,'ABCDEF0123456789') AS CHAR) AS content
FROM test
WHERE CAST(AES_DECRYPT(content,'ABCDEF0123456789') AS CHAR) like '%string was%';

Keluarannya adalah:

This string was AES-128 / EBC / ZeroBytePadding encrypted.

Catatan:Tabel MySQL dibuat oleh:

create table test (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
content blob ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hubungkan MySQL melalui localhost tidak berfungsi tetapi 127.0.0.1 berfungsi

  2. Apakah utas mysql_insert_id aman?

  3. Mengapa Magento gagal menyelamatkan pelanggan setelah membuat ID?

  4. SocketException :Tidak ada host seperti itu yang diketahui

  5. Bagaimana kita bisa mengganti nama nama database di MySQL 5.0