gpt4 book ai didi

hash - ColdFusion 哈希

转载 作者:行者123 更新时间:2023-12-04 12:04:32 29 4
gpt4 key购买 nike

我正在尝试使用此公式创建密码摘要以获取以下变量,但我的代码不匹配。不确定我做错了什么,但当我需要帮助时我会承认。希望有人在那里可以提供帮助。

  • 文档中的公式:Base64(SHA1(NONCE + TIMESTAMP + SHA1(PASSWORD)))
  • 正确的密码摘要答案:+LzcaRc+ndGAcZIXmq/N7xGes+k=

  • 冷聚变代码:
    <cfSet PW = "AMADEUS">
    <cfSet TS = "2015-09-30T14:12:15Z">
    <cfSet NONCE = "secretnonce10111">
    <cfDump var="#ToBase64(Hash(NONCE & TS & Hash(PW,'SHA-1'),'SHA-1'))#">

    我的代码输出:
    Njk0MEY3MDc0NUYyOEE1MDMwRURGRkNGNTVGOTcyMUI4OUMxM0U0Qg==

    我显然做错了什么,但对于我的生活,我无法弄清楚是什么。任何人?布勒?

    最佳答案

    散列的有趣之处在于,即使您从正确的字符串开始,如果这些字符串的组合/编码/解码不正确,结果仍然可能完全错误。

    最大的问题是这些函数中的大多数实际上都使用输入字符串的二进制表示。所以这些字符串的解码方式有很大的不同。请注意,当解码为 UTF-8 与十六进制时,相同的字符串会产生完全不同的二进制文件吗?这意味着 Hash、ToBase64 等的结果也将完全不同。

    // Result: UTF-8: 65-65-68-69
    writeOutput("<br>UTF-8: "& arrayToList(charsetDecode("AADE", "UTF-8"), "-"));

    // Result: HEX: -86--34
    writeOutput("<br>HEX: "& arrayToList(binaryDecode("AADE", "HEX"), "-"));

    可能的解决方案:

    当前代码的问题在于 ToBase64假设输入字符串被编码为 UTF-8。而 Hash()实际上返回一个十六进制字符串。所以 ToBase64() 解码不正确。相反,使用 binaryDecodebinaryEncode将哈希从十六进制转换为 base64:
    resultAsHex = Hash( NONCE & TS & Hash(PW,"SHA-1"), "SHA-1");
    resultAsBase64 = binaryEncode(binaryDecode(resultAsHex, "HEX"), "base64");
    writeDump(resultAsBase64);

    更强大的解决方案:

    话虽如此,要非常小心字符串连接和散列。如 it does not always yield the expected results .如果不了解有关此特定 API 的更多信息,我无法完全确定它的期望。但是,仅使用二进制值通常更安全。不幸的是,CF 的 ArrayAppend() 函数缺乏对二进制数组的支持,但您可以轻松使用 Apache's ArrayUtils类,与 CF 捆绑在一起。
    ArrayUtils = createObject("java", "org.apache.commons.lang.ArrayUtils");

    // Combine binary of NONCE + TS
    nonceBytes = charsetDecode(NONCE, "UTF-8");
    timeBytes = charsetDecode(TS, "UTF-8");
    combinedBytes = ArrayUtils.addAll(nonceBytes, timeBytes);

    // Combine with binary of SECRET
    secretBytes = binaryDecode( Hash(PW,"SHA-1"), "HEX");
    combinedBytes = ArrayUtils.addAll(combinedBytes, secretBytes);

    // Finally, HASH the binary and convert to base64
    resultAsHex = hash(combinedBytes, "SHA-1");
    resultAsBase64 = binaryEncode(binaryDecode(resultAsHex, "hex"), "base64");

    writeDump(resultAsBase64);

    关于hash - ColdFusion 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058945/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com