sql >> Databasteknik >  >> RDS >> Mysql

AES-kryptering i mysql och php

Det finns tre problem med koden du använder:

  1. Som andra har nämnt använder din PHP-kod för närvarande MCRYPT_RIJNDAEL_256 som dokumenterat under AES_ENCRYPT() :

  2. Som andra har nämnt använder du base64_encode() för att konvertera PHPs binära resultat till text, medan MySQL-resultatet bara verkar vara en hexadecimal representation av dess binära resultat. Du kan antingen använda TO_BASE64() i MySQL sedan v5.6.1 eller annars bin2hex() i PHP.

  3. Som dokumenterats under mcrypt_encrypt() :

    Medan MySQL använder PKCS7-utfyllnad .

Därför, för att få samma resultat i PHP som du för närvarande visar för 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. Hur man returnerar utdata från lagrad procedur till en variabel i sql-server

  2. MySQL Tutorial:MySQL IN-uttalande (avancerat)

  3. Automatisk datainsamling av databasschemaändringar i MS SQL Server

  4. MySQL heltalsfält returneras som sträng i PHP