Mysql
 sql >> база данни >  >> RDS >> Mysql

AES криптиране в mysql и php

Има три проблема с кода, който използвате:

  1. Както други споменаха, вашият PHP код в момента използва MCRYPT_RIJNDAEL_256 като има предвид, че както е документирано под AES_ENCRYPT() :

  2. Както други споменаха, вие прилагате base64_encode() за преобразуване на двоичния резултат на PHP в текст, докато резултатът от MySQL изглежда просто шестнадесетично представяне на неговия двоичен резултат. Можете да използвате или TO_BASE64() в MySQL от v5.6.1 или иначе bin2hex() в PHP.

  3. Както е документирано под mcrypt_encrypt() :

    Докато MySQL използва PKCS7 padding .

Следователно, за да получите същите резултати в PHP, както в момента показвате за 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. Как мога да конвертирам файл MDB (Достъп) в MySQL (или обикновен SQL файл)?

  2. Има ли ограничения за дължината на низа в mysql?

  3. Мигриране на MySQL UTF8 към UTF8MB4 проблеми и въпроси

  4. как да намеря първия и последния запис от таблицата на mysql

  5. структура на таблицата на mysql с множество променливи