微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Coldfusion cfqueryparam - 改变编码?

如何解决Coldfusion cfqueryparam - 改变编码?

使用 EncryptByKey 和 cfqueryparam 运行查询时,该值似乎被截断了。

例如:

<cfset customer_number = 123 /> 
<cfset soc_sec_number = "123-45-6789" />

<cfquery datasource="web_applications">
    OPEN SYMMETRIC KEY SSNKey
        DECRYPTION BY CERTIFICATE SSNCert;

    UPDATE 
        Customers

    SET 
        
        SSN_Encrypted = EncryptByKey( Key_GUID( 'SSNKey' ),<cfqueryparam cfsqltype="CF_sql_VARCHAR" value="#soc_sec_number#" >   )
        

    WHERE 
        customer_number = <cfqueryparam cfsqltype="CF_sql_VARCHAR" value="#customer_number#" > ;


        CLOSE SYMMETRIC KEY SSNKey;
</cfquery>

解密后的结果数据库值为“1”。如果我删除 <cfqueryparam>,整个值将毫无问题地存储。此外,此问题仅在与 EncryptByKey 结合使用时才会发生。

我们使用的是 CF 2018 和 sql 2016。昨天才开始出现这个问题。它可能有关系也可能没有关系,但我们的力量昨天已经失去了。是否有可能是某些 cf 文件已损坏,或者某些编码设置已更改?我将如何检查这个?

更新:

执行以下查询时:

<cfquery name="get_ssn">
     OPEN SYMMETRIC KEY SSNKey
                DECRYPTION BY CERTIFICATE SSNCert;

            SELECT      
                CONVERT( VARCHAR,DecryptByKey( [ssnEncrypted] ) ) AS decrypted_ssn
                
            FROM        
                customers
            
            WHERE 
                Customer.customer_number= <cfqueryparam cfsqltype="CF_sql_VARCHAR" value="#customer_number#" >  ;
           
            CLOSE SYMMETRIC KEY SSNKey;
</cfquery>

decrypted_ssn 的结果值如下:

<cfdump var="#get_ssn.decrypted_ssn#"> -> 123-45-6789 
<cfdump var="#right(get_ssn.decrypted_ssn,4)#"> -> 89

in sql studio -> 1 

此时我怀疑存在编码问题,因为 Coldfusion 返回完整值但认为 right(123-45-6789,4)89 而不是 6789

我不知道如何测试这个理论。

更新:

我已经确认这个问题出现在多个表上,并且有多个对称密钥。

再次更新: 使用cfqueryparam保存的字符串,当使用LEN()命令时,输出22,而WITHOUT cfqueryparam的值输出11。

更新: 我遵循了解决方Here,它似乎解决了我的问题。但我想了解这是怎么发生的。直到昨天,当电源断电并且服务器重新启动时,连接似乎才需要这样做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。