5

我们正在尝试在 ColdFusion 中计算 HMAC-SHA256 摘要并且我们正在使用 HMAC CFC,但在一种情况下,与以不同语言生成的摘要相比,它产生的摘要结果不同 - 使用 Ruby 和 PHP 尝试了相同的数据并得到预期的结果。我还尝试了它所基于的 CF_HMAC 自定义标签并获得了相同的结果。

我知道 CF8encrypt()支持 HMAC-SHA256,但它仅在 Enterprise 中可用(我们没有),甚至在开发人员版本中也没有供我测试。

所以我的问题是我可以通过从 CF 访问 Java 来做到这一点吗?

4

2 回答 2

11

这就是我最终做的事情:

secret = createObject('java', 'javax.crypto.spec.SecretKeySpec' ).Init(my_key.GetBytes(), 'HmacSHA256');
mac = createObject('java', "javax.crypto.Mac");
mac = mac.getInstance("HmacSHA256");
mac.init(secret);
digest = mac.doFinal(my_data.GetBytes());

这为您提供了字节数组,然后您可以将其转换为字符串。

于 2009-06-04T16:51:40.280 回答
0

这是 DEfusion 使用不同输入/输出格式的答案示例。我的密钥是十六进制,我的数据是较低的 ascii(所以 UTF-8 可以),我需要 base64 输出,所以我将适当的格式参数传递给 BinaryDecode 和 CharsetDecode:

<cfset keybytes = BinaryDecode(SECRET_KEY, "Hex")>
<cfset databytes = CharsetDecode(data, "UTF-8")>
<cfset secret = createObject("java", "javax.crypto.spec.SecretKeySpec").Init(keybytes,"HmacSHA256")>
<cfset mac = createObject("java", "javax.crypto.Mac")>
<cfset mac = mac.getInstance("HmacSHA256")>
<cfset mac.init(secret)>
<cfset digest = mac.doFinal(databytes)>
<cfset result = BinaryEncode(digest, "Base64")>
于 2013-09-25T01:00:53.290 回答