这更像是我做错了什么而不是关键任务的练习,但我仍然想看看我犯了什么(可能很简单)错误。
我正在使用 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。