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

Enkripsi AES di mysql dan php

Ada tiga masalah dengan kode yang Anda gunakan:

  1. Seperti yang telah disebutkan orang lain, kode PHP Anda saat ini menggunakan MCRYPT_RIJNDAEL_256 sedangkan, seperti yang didokumentasikan dalam AES_ENCRYPT() :

  2. Seperti yang telah disebutkan orang lain, Anda menerapkan base64_encode() untuk mengonversi hasil biner PHP menjadi teks, sedangkan hasil MySQL tampak hanya sebagai representasi heksadesimal dari hasil binernya. Anda dapat menggunakan TO_BASE64() di MySQL sejak v5.6.1 atau bin2hex() dalam PHP.

  3. Seperti yang didokumentasikan dalam mcrypt_encrypt() :

    Sedangkan MySQL menggunakan padding PKCS7 .

Oleh karena itu, untuk mendapatkan hasil yang sama di PHP seperti yang Anda tampilkan saat ini untuk 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. Cara Menghitung Pengguna Aktif Harian (DAU) di MySQL

  2. MySQL BUAT TABEL JIKA TIDAK ADA -> Kesalahan 1050

  3. Apakah mungkin untuk meneruskan variabel ke panggilan prosedur tersimpan di mysql?

  4. Java terhubung ke Cloud SQL 2nd Gen dari Appengine Managed VM

  5. mysql.sock hilang; menghasilkan OperationalError:(2002, Tidak dapat terhubung ke server MySQL lokal melalui soket '/tmp/mysql.sock' (2))