これは、ミッションクリティカルというよりも、私が間違っていることの練習になりましたが、それでも、私が犯している(おそらく単純な)間違いを確認したいと思います。
文字列を暗号化するためにmysql(5.1.x)AES_ENCRYPTを使用しています。CFのgenerateSecretKey('AES')を使用してキーを作成しています(デフォルトで128ビットと256ビットの長さで試しました)。
それで、私のコードが次のようになっているとしましょう:
<cfset key = 'qLHVTZL9zF81kiTnNnK0Vg=='/>
<cfset strToEncrypt = '4111111111111111'/>
<cfquery name="i" datasource="#dsn#">
INSERT INTO table(str)
VALUES AES_ENCRYPT(strToEncrypt,'#key#');
</cfquery>
これは期待どおりに正常に機能し、SELECT AES_DECRYPT(str、'#key#')AS...を使用して問題なく選択できます。
私ができないように見えるのは、CFに次のようなものを使用して復号化させることです。
<cfquery name="s" datasource="#dsn#">
SELECT str
FROM table
</cfquery>
<cfoutput>#Decrypt(s.str,key,'AES')#</cfoutput>
また
<cfoutput>#Decrypt(toString(s.str),key,'AES')#</cfoutput>
「入力と出力のエンコーディングが同じではありません」(toString()を含む-それがないと、バイナリデータエラーが発生します)が発生し続けます。db内の暗号化された文字列のフィールドタイプはblobです。