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

Mã hóa AES trong mysql và php

Có ba vấn đề với mã bạn đang sử dụng:

  1. Như những người khác đã đề cập, mã PHP của bạn hiện đang sử dụng MCRYPT_RIJNDAEL_256 trong khi, như được ghi lại trong AES_ENCRYPT () :

  2. Như những người khác đã đề cập, bạn đang áp dụng base64_encode () để chuyển đổi kết quả nhị phân của PHP thành văn bản, trong khi kết quả MySQL dường như chỉ là một biểu diễn thập lục phân của kết quả nhị phân của nó. Bạn có thể sử dụng TO_BASE64 () trong MySQL kể từ v5.6.1 trở đi bin2hex () bằng PHP.

  3. Như được ghi lại trong mcrypt_encrypt () :

    Trong khi MySQL sử dụng PKCS7 padding .

Do đó, để có được kết quả tương tự trong PHP như bạn đang hiển thị cho MySQL:

<?php

class MySQL_Function {
  const PKCS7 = 1;

  private static function pad($string, $mode, $blocksize = 16) {
    $len = $blocksize - (strlen($string) % $blocksize);
    switch ($mode) {
      case self::PKCS7:
        $padding = str_repeat(chr($len), $len); break;

      default:
        throw new Exception();
    }
    return $string.$padding;
  }

  public static function AES_ENCRYPT($str, $key_str) {
    return mcrypt_encrypt(
      MCRYPT_RIJNDAEL_128,
      $key_str, self::pad($str, self::PKCS7),
      MCRYPT_MODE_ECB
    );
  }
}

echo bin2hex(MySQL_Function::AES_encrypt( "Hello World", "password" ));

?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể sử dụng một hàm cho giá trị mặc định trong MySql không?

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Không có hoạt động nào được phép sau khi kết nối đóng

  3. Lỗi phân tích cú pháp:lỗi cú pháp, không mong muốn (T_VARIABLE)

  4. LOAD DATA INFILE không hoạt động

  5. Toán hạng nên chứa 1 cột - MySQL KHÔNG VÀO