有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java在ColdFusion中计算HMACSHA256摘要的加密

我们正在尝试在ColdFusion中计算HMAC-SHA256摘要,我们正在使用HMAC CFC,但在一个案例中,它为摘要生成的结果与用不同语言生成的结果不同——我们使用Ruby&;并得到预期的结果。我还尝试了它所基于的CF_HMAC自定义标记,得到了相同的结果

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

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


共 (2) 个答案

  1. # 1 楼答案

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

    这就是我最后做的:

    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());
    

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