jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

mariadbの復号化が上手くいかない

Q&A

Closed

https://qiita.com/mhagita/items/899483f08347fddd9567
を参考にして、mariadbにて暗号化・復号化を試みていますが、復号化されるケースとされないケースがあります。

select
  convert(
    AES_DECRYPT(UNHEX(mail_address), 'password')
    USING utf8mb4
  )
from
  customer

だと、復号化されたメールアドレスが返ってきます。

select
  convert(
    AES_DECRYPT(UNHEX(mail_address), 'password')
    USING utf8mb4
  )
from
  customer
where
  convert(
    AES_DECRYPT(UNHEX(mail_address), 'password')
    using utf8mb4
  )
  = 'mail_address'

だと、0件が返ってきます。

違いは、where句があるかないかです。
上記のwhere・・・・='mail_address'のmail_addressには、1件目のSQLで返ってきたメールアドレスを入れてます。

試しに、

select
*
from
  customer
where
  convert(
    AES_DECRYPT(UNHEX(mail_address), 'password')
    using utf8mb4
  )
  = 'mail_address'

も実行してみましたが、こちらも0件が返ってきます。

SQLに問題があるのでしょうが、恥ずかしながら自分では発見できませんでした。

確認ポイントをご教示いただければ幸いです。
よろしくお願いいたします。

0

1Answer

mySQLでは文字列リテラルはデフォルトでutf8エンコーディングを使用します。

utf8mb4の結果と比較されたと推測します。

using utf8 にするか?
次を参考に検証してください。

尚、SQLはpythonのように _utf8mb4'mail_address' のリテラルを強制定義できそうです。

そもそも、メールアドレスに絵文字は使われないのでは?

0Like

Comments

  1. @jackytom

    Questioner

    回答ありがとうございます。
    解決しました。
    ありがとうございました。

Your answer might help someone💌