sql >> Databáze >  >> RDS >> Mysql

AES šifrování v mysql a php

Kód, který používáte, má tři problémy:

  1. Jak již uvedli ostatní, váš kód PHP aktuálně používá MCRYPT_RIJNDAEL_256 vzhledem k tomu, jak je zdokumentováno v části AES_ENCRYPT() :

  2. Jak již uvedli ostatní, používáte base64_encode() převést binární výsledek PHP na text, zatímco výsledek MySQL se zdá být pouze hexadecimální reprezentací jeho binárního výsledku. Můžete buď použít TO_BASE64() v MySQL od verze 5.6.1 nebo jinak bin2hex() v PHP.

  3. Jak je zdokumentováno v části mcrypt_encrypt() :

    Zatímco MySQL používá výplň PKCS7 .

Chcete-li tedy v PHP získat stejné výsledky, jaké aktuálně ukazujete pro 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. Nelze se připojit k mysql s 127.0.0.1

  2. Jak zkontrolovat databázi na nerootovaném zařízení Android

  3. Místní replikace/synchronizace databáze Firebird do online databáze

  4. Získávání chyby:Autentizace peer selhala pro uživatele postgres, když se pokouší zprovoznit pgsql s rails