gpt4 book ai didi

使用 SHA1 的 Fantom HMAC 的 Java 等价物

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:06 24 4
gpt4 key购买 nike

我在用 Java 执行以下操作时遇到问题。以下是我正在使用的工具文档中的 Fantom 代码。

// compute salted hmac
hmac := Buf().print("$username:$userSalt").hmac("SHA-1", password.toBuf).toBase64

// now compute login digest using nonce
digest := "${hmac}:${nonce}".toBuf.toDigest("SHA-1").toBase64

// our example variables
username: "jack"
password: "pass"
userSalt: "6s6Q5Rn0xZP0LPf89bNdv+65EmMUrTsey2fIhim/wKU="
nonce: "3da210bdb1163d0d41d3c516314cbd6e"
hmac: "IjJOApgvDoVDk9J6NiyWdktItl0="
digest: "t/nzXF3n0zzH4JhXtihT8FC1N3s="

我一直在通过 Google 搜索各种示例,但没有一个产生文档声称应返回的结果。

有 Fantom 知识的人可以验证文档中的示例是否正确吗?

至于Java方面,这是我最近的尝试

    public static String hmacSha1(String value, String key) {
try {
// Get an hmac_sha1 key from the raw key bytes
byte[] keyBytes = key.getBytes("UTF-8");
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

// Get an hmac_sha1 Mac instance and initialize with the signing key
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);

// Compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(value.getBytes("UTF-8"));

// Convert raw bytes to Hex
byte[] hexBytes = new Hex().encode(rawHmac);

// Covert array of Hex bytes to a String
return new String(hexBytes, "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e);
}
}

但是,当我调用带有以下参数的方法时

jack:6s6Q5Rn0xZP0LPf89bNdv+65EmMUrTsey2fIhim/wKU=
pass

我明白了

22324e02982f0e854393d27a362c96764b48b65d

最佳答案

不确定文档的来源 - 但它们可能已过时 - 或者是错误的。我实际上会运行 Fantom 代码作为您的引用,以确保您正在测试正确的东西;)

您可以查看 sys::Buf.hmac 的 Java 源代码:MemBuf.java

我还建议将 3 个转换分开。确保您的原始字节数组在 Fantom 和 Java 中都匹配,然后验证摘要匹配,最后验证 Base64 编码。更容易验证代码中的每个阶段。

关于使用 SHA1 的 Fantom HMAC 的 Java 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685727/

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