Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Szyfrowanie AES w mysql i php

Istnieją trzy problemy z używanym kodem:

  1. Jak wspomnieli inni, Twój kod PHP używa obecnie MCRYPT_RIJNDAEL_256 mając na uwadze, że zgodnie z dokumentacją w AES_ENCRYPT() :

  2. Jak wspomnieli inni, stosujesz base64_encode() do konwersji wyniku binarnego PHP na tekst, podczas gdy wynik MySQL wydaje się jedynie szesnastkową reprezentacją wyniku binarnego. Możesz użyć TO_BASE64() w MySQL od wersji 5.6.1 lub bin2hex() w PHP.

  3. Jak udokumentowano w mcrypt_encrypt() :

    Podczas gdy MySQL używa dopełnienia PKCS7 .

Dlatego, aby uzyskać te same wyniki w PHP, które obecnie pokazujesz dla 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. PHP :Używanie zmiennej do przechowywania nazwy tabeli i używanie tej zmiennej w zapytaniach

  2. Czy istnieje sterownik mysql na nodejs, który obsługuje procedury składowane?

  3. losowe liczby w java

  4. MySQL:BŁĄD 1227 (42000):Odmowa dostępu - Nie można UTWORZYĆ UŻYTKOWNIKA

  5. Duplikuj, kopiuj lub twórz kopie zapasowe tabel w MySQL, MariaDB, Oracle, PostgreSQL, DB2 i SQLite za pomocą funkcji Utwórz tabelę jako SQL