我想弄清楚如何生成SQL Server和ColdFusion之间匹配的MD 5哈希值。根本原因似乎是SQL Server字段是nvarchar
数据类型,这似乎意味着我需要对字符串的编码做些什么,我会在ColdFusion或Java中进行散列以使其匹配,但我无法想象它出。为了清楚这是否是SQL Server varchar字段,一切正常。如何生成匹配MD5哈希:SQL Server nvarchar字段与ColdFusion
这里是我想要的代码:
<cfset stringToHash = "Hello world!">
<cfquery name="sqlserver" datasource="#mySqlServerDSN#">
SELECT RIGHT(
master.dbo.fn_varbintohexstr(
HashBytes(
'MD5',
CAST(<cfqueryparam value="#stringToHash#" cfsqltype="cf_sql_varchar"> AS nvarchar(max))
)
)
, 32) AS HASHED
</cfquery>
<cfoutput>
<pre>
CF UFT-8: #hash(stringToHash, 'MD5', 'UTF-8')#
CF UFT-16: #hash(stringToHash, 'MD5', 'UTF-16')#
SQL Server: #sqlserver.hashed#
</pre>
</cfoutput>
主要生产
CF UTF-8: 86FB269D190D2C85F6E0468CECA42A20
CF UTF-16: 0C89A9720D83539E3723BB99C07D069F
SQL Server: f9a6119c6ec37ce652960382f8b59f2c
所以我猜我需要改变我传递给hash()
最后一个参数是不同的编码,但我无法弄清楚。我也将这个问题也标记为Java,因为我很乐意以该语言来回答问题。
其他人似乎有与.net http://stackoverflow.com/questions/5341556/calculating-sha1-hash-of-a-nvarchar-string-using-t-sql这个问题我不没有办法测试出来,但也许默认情况下CF UTF-16编码是Big Endian? – patrickmcgraw 2011-04-10 15:55:02
如果要将纯字符串值与SQL hased列进行比较,请将纯字符串传递给使用SQL的SQL&hash。然后与该栏进行比较。你有什么具体的要求来检查在CF代码? – 2011-04-10 17:46:07