sql >> データベース >  >> RDS >> Mysql

mysqlおよびphpでのAES暗号化

    使用しているコードには3つの問題があります:

    1. 他の人が言及しているように、あなたのPHPコードは現在 MCRYPT_RIJNDAEL_256を使用しています 一方、 AES_ENCRYPT()

    2. 他の人が述べているように、あなたは base64_encode()を適用しています PHPのバイナリ結果をテキストに変換しますが、MySQLの結果は単にそのバイナリ結果の16進表現であるように見えます。 TO_BASE64()> MySQLではv5.6.1以降、または bin2hex() PHPで。

    3. mcrypt_encrypt()に記載されているとおり

      MySQLはPKCS7パディング を使用します。 。

    したがって、現在MySQLで示しているのと同じ結果をPHPで取得するには、次のようにします。

    <?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. データベースプロセスを高速化するにはどうすればよいですか?

    2. IN句の関数またはプロシージャ

    3. PostgreSQLデータベースでどのタイムスタンプタイプを選択する必要がありますか?

    4. スパンをMySQLデータベースに時間どおりに保存する最良の方法は?