アプリ版:「スタンプのみでお礼する」機能のリリースについて

MySQLで暗号化を試みていますが、うまくいきません。バージョン等も問題がないようです。暗号化後の文字列長が短くなっています。また、復号化も出来ていません。何かサーバで設定が必要でしょうか?PHP4とMYSQL4.1です。宜しくお願いいたします。

A 回答 (2件)

AES_ENCRYPT関数はバイナリデータを出力します。

質問者さんは、varchar型などのカラムに暗号化後データを入れているのではないかと思いますが、blob型(tinyblobなど)のカラムに入れる必要があります。

blob型カラムのサイズは、暗号化前データのバイト数に1を加えた数値を、16の倍数に切り上げた分だけ必要です。暗号化前データの長さが19バイトならば、暗号化後のデータを保存するカラムは32バイト必要です(この場合はtinyblobでよい)。

varcharやchar型のカラムに暗号化後のデータを保存する場合は、HEX関数でHEXダンプしてから保存します。その場合、さらに大きなサイズのカラムが必要です(HEXしない場合の倍のサイズが必要)。
    • good
    • 0
この回答へのお礼

ありがとうございます。うまくいきました。
はじめて行うことだったので、マニュアルを見ながらやったのですが、ここまで書いてくれていませんでした。当然と言えば当然ですね。
スッキリ!です。

お礼日時:2006/11/29 09:47

文字列の長さ制限が単純に適用されているのでは?



もうすこし具体例をだしていただけると回答のしようもあるかと。

この回答への補足

暗号化 UPDATE kaiin SET card_no= aes_encrypt('1111-1111-1111-1111','happy') where vmem_no=9;
$result = mysql_query($sql,$db) or die("失敗しました");
暗号化後の文字列が短くなります。

復号化
SELECT AES_DECRYPT(card_no,'happy') FROM kaiin where kaiin_no =9;
$result = mysql_query($sql,$db) or die("失敗しました");
if($row = mysql_fetch_array($result,MYSQL_ASSOC)){
 print "card_no=".$row['card_no']."<hr>";
}
復号化のデータはNullとなってしまいました。
どこがおかしいでしょうか?教えて下さい。
お願い致します。

補足日時:2006/11/28 11:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す