sql >> Database >  >> RDS >> Mysql

AES-codering in mysql en php

Er zijn drie problemen met de code die u gebruikt:

  1. Zoals anderen al hebben vermeld, gebruikt uw PHP-code momenteel MCRYPT_RIJNDAEL_256 overwegende dat, zoals gedocumenteerd onder AES_ENCRYPT() :

  2. Zoals anderen al hebben vermeld, past u base64_encode() . toe om het binaire resultaat van PHP naar tekst te converteren, terwijl het MySQL-resultaat slechts een hexadecimale weergave van het binaire resultaat lijkt te zijn. U kunt ofwel TO_BASE64() in MySQL sinds v5.6.1 of anders bin2hex() in PHP.

  3. Zoals gedocumenteerd onder mcrypt_encrypt() :

    Terwijl MySQL PKCS7-padding gebruikt .

Daarom, om dezelfde resultaten in PHP te verkrijgen als u momenteel laat zien voor 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. C# verbinden met mysql via gebruikerscontrole

  2. Toegang tot de opmerkingen van het MySQL-veld met PHP

  3. Tel het aantal DISTINCT-waarden

  4. hoe mysql-gegevens naar ElasticSearch realtime te migreren