Coldfusion 哈希密码有时超过128个字符

Coldfusion 哈希密码有时超过128个字符,coldfusion,Coldfusion,我遇到了一个奇怪的安全相关问题,最近我在尝试在SQL Server数据库字段nvarchar(130)中插入哈希密码时,经常出现间歇性错误: hashpass变量的设置如下: <cfset hashpass = Hash(arguments.password & getsalt.user_salt, "SHA-512")> 想知道一个SHA-512哈希值怎么可能超过128个字符,而文档上说它应该始终是128个字符?以下是ColdFusion 10错误: [Macr

我遇到了一个奇怪的安全相关问题,最近我在尝试在SQL Server数据库字段nvarchar(130)中插入哈希密码时,经常出现间歇性错误:


hashpass变量的设置如下:

<cfset hashpass =  Hash(arguments.password & getsalt.user_salt, "SHA-512")>

想知道一个SHA-512哈希值怎么可能超过128个字符,而文档上说它应该始终是128个字符?以下是ColdFusion 10错误:


[Macromedia][SQLServer JDBC Driver][SQLServer]字符串或二进制数据将被截断。

从您的错误中可以看出,问题在于数据库级别,因为ColdFusion没有通过对
cfqueryparam
标记的
maxlength
检查,并且允许执行查询。我刚刚测试了如何传递一个超过
maxlength
属性(在CF10上)中指定长度的字符串,并得到错误:

The cause of this output exception was that: 
coldfusion.tagext.sql.QueryParamTag$InvalidDataException: 
Invalid data value this-is-a-string-that-is-too-long exceeds maxlength setting 10..`
正如在对问题的评论中提到的,可能是查询中的另一个字段引发了错误


由于散列密码的长度为128个字符-验证130个字符是否有原因?

(编辑)AFAIK,是的,它应该生成512位值/128个字符,编码为十六进制。当错误发生时,实际值是什么?我希望当我试图重现代码工作时,知道失败的实际值。我可以输入try/catch并通过电子邮件发送失败的值,这种情况经常发生,只是在我尝试时不会发生。本着try/catch的精神,Application.cfc的onerror()函数做什么?pwd是您在该查询中插入的唯一列吗?你能发布整个查询和整个错误消息吗(我们不需要堆栈跟踪)。为什么要对该列使用nvarchar,然后使用char传递其值?这似乎有点奇怪,邓尼?哪个版本的ColdFusion?好问题。克里斯-你的CF版本是什么?供CF10+使用。(虽然您可能不需要nvarchar类型来存储十六进制)谢谢大家,我把错误行号看得太过字面……结果表明,此插入的许多数据来自另一个表,其中的字段在许多情况下都相当长……因此,调整目标表中的字段大小以匹配。
The cause of this output exception was that: 
coldfusion.tagext.sql.QueryParamTag$InvalidDataException: 
Invalid data value this-is-a-string-that-is-too-long exceeds maxlength setting 10..`