Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mã hóa với PHP Mcrypt và Giải mã với MySQL aes_decrypt?

Tôi đã tìm thấy một số trợ giúp hữu ích tại đây

Lưu ý rằng điều này hoạt động đối với văn bản được mã hóa có tối đa 65519 ký tự trong văn bản thuần túy. (có thể nhiều hơn một chút nếu không có mã hóa UTF-8)

Mã PHP để mã hóa:

// 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();

Truy vấn SQL để tìm kiếm chuỗi 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%';

Đầu ra là:

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

Lưu ý:Bảng MySQL được tạo bởi:

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. dữ liệu đồng bộ nhanh chóng của dữ liệu cốt lõi một cơ sở dữ liệu mysql

  2. Có bao nhiêu hàng trong cơ sở dữ liệu QUÁ NHIỀU?

  3. Đặt bộ ký tự / đối chiếu trong Bảng bằng cách sử dụng Hibernate Dialect?

  4. Nhập cơ sở dữ liệu MySQL từ máy chủ này sang máy chủ khác

  5. Mảng trong Mysql NHƯ THẾ NÀO?