代码之家  ›  专栏  ›  技术社区  ›  DEfusion

使用Java计算ColdFusion中的HMAC-SHA256摘要

  •  5
  • DEfusion  · 技术社区  · 15 年前

    我从CF8中了解到这一点 encrypt() 支持HMAC-SHA256,但它只在企业版中可用(我们没有),甚至在开发人员版本中也不可用,我无法测试。

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

    2 回复  |  直到 12 年前
        1
  •  11
  •   Peter Boughton    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());
    

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

        2
  •  0
  •   krubo    11 年前

    下面是一个使用不同输入/输出格式的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")>