Я пытаюсь выяснить, как сгенерировать совпадающее хеш-значение MD 5 между SQL Server и ColdFusion. Основная причина заключается в том, что поле SQL Server имеет тип данных nvarchar
, что, по-видимому, означает, что мне нужно что-то сделать с кодировкой строки, которую я бы хэшировал в ColdFusion или Java, чтобы она соответствовала, но я не могу понять это. Чтобы было ясно, если это поле SQL Server varchar, все работает.
Вот код, который я пытаюсь:
<code><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#
Производит
CF UTF-8: 86FB269D190D2C85F6E0468CECA42A20
CF UTF-16: 0C89A9720D83539E3723BB99C07D069F
SQL Server: f9a6119c6ec37ce652960382f8b59f2c
Итак, я думаю, мне нужно изменить последний аргумент, который я передаю, на hash()
, чтобы он стал другой кодировкой, но я не могу понять это. Я также пометил этот вопрос как Java, потому что я более чем рад получить ответ и на этом языке.