CF10 AES-256 (AES/CBC/PKCS5Padding アルゴリズム) を使用して、暗号化された文字列を MySQL 列 (BLOB) に格納しようとすると、次のエラーが発生します。
java.lang.String は [B にキャストできません
デフォルトの UU および base64 エンコーディングを試してみましたが、同じエラーが発生しました (半関連 - UU よりも base64 に保存する利点、またはその逆の利点はありますか?)。
現在の私のコードは、単純なテスト更新クエリです。cfqueryparam で cfsqltype を blob と varchar の両方に設定しようとしました (そして、cfqueryparam を試しませんでした)。
ジェイソンからの提案の後、私が今持っている私のコードは次のとおりです。ただし、復号化された文字列を取り戻すことに固執しています。
<cfset thePlainText = '010101939393923490 this is my string to encrypt'/>
<cfset theKey = application.sec.AESKey256/>
<cfset theAlgorithm = "AES/CBC/PKCS5Padding" />
<cfset theEncoding = "base64" />
<cfset encryptedString = toBinary(encrypt(thePlainText, theKey, theAlgorithm, theEncoding)) />
<cfquery name="upd" datasource="#myds#">
UPDATE table SET
field = <cfqueryparam cfsqltype="cf_sql_blob" value="#encryptedString#"/>
WHERE id=1
</cfquery>
その後、それはすべて順調です。データベースに blob フィールドがあり、データを格納しています。したがって、それを選択し直したい場合は、問題が発生します。
<cfquery name="qry" datasource="#myds#">
SELECT field
FROM table
WHERE id=1
</cfquery>
私はこれがうまくいくと思った:
<cfset decryptedString = decrypt(toString(qry.field), theKey, theAlgorithm, theEncoding)/>
しかし、「入力文字列を暗号化または復号化しようとしているときにエラーが発生しました: 入力と出力のエンコーディングが同じではありません」というメッセージが表示されます。
暗号化された文字列 var と qry クエリをダンプすると、暗号化された文字列とダンプされたデータは実際には異なります
解決済み (toBase64 ではなく toString)
<cfset decryptedString = decrypt(toBase64(qry.field), theKey, theAlgorithm, theEncoding)/>