gpt4 book ai didi

java - 将安全 token 功能从 C# 重新创建为 Java

转载 作者:行者123 更新时间:2023-12-02 11:43:56 25 4
gpt4 key购买 nike

我有一个应用程序,正在从 C# 转换为 Java(最终我想将其变成 Android 应用程序)。

提供一些背景信息:应用程序连接到 Web 服务器,并使用 JSON 格式的“ key ”请求进行登录。JSON 中有一个由以下代码生成的 token :

public static string GenToken(string secret, string str)
{
string token;
using (var stream = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(str)))
{

using (var hmac = new System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(secret)))
{
var hash = hmac.ComputeHash(stream);
var hashStr = BitConverter.ToString(hash);
token = string.Format("{0}.{1}", hashStr.Replace("-", ""), str);

}
}

return Convert.ToBase64String(Encoding.UTF8.GetBytes(token));
}

我发现的最接近的是我找到的一些代码 here但这仍然无法产生与 C# 代码相同的结果。

我需要的是能够在 Java 中产生与这段 C# 代码相同的结果。否则认证失败。

作为引用,我正在使用以下值进行测试:

secret = 7353388933d07b2a1ef462c9d3f4e8ca;
str = {"userId":"bcf4fc83-291a-11e7-9def-06948e004f29","expires":1516015203090}

此输出

OTQyMDk1NTI2Mzc3NDYyRjk1RTYzQzUzNUVCNzg3MDQ1NjlBNDQ5OEM1MTM1N0I2QTQ3REY1OTA5M0Q3MjMzQS57InVzZXJJZCI6ImJjZjRmYzgzLTI5MWEtMTFlNy05ZGVmLTA2OTQ4ZTAwNGYyOSIsImV4cGlyZXMiOjE1MTYwMTUyMDMwOTB9 

编辑我已经意识到这一点

using (var stream = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(str)))

正在生成十六进制值

 7B-22-75-73-65-72-49-64-22-3A-22-62-63-66-34-66-63-38-33-2D-32-39-31-61-2D-31-31-65-37-2D-39-64-65-66-2D-30-36-39-34-38-65-30-30-34-66-32-39-22-2C-22-65-78-70-69-72-65-73-22-3A-31-35-31-36-30-31-35-32-30-33-30-39-30-7D

我已经能够在 Java 中执行以下操作(无需替换破折号)

public static String toHex(String arg) {
return String.format("%040X", new BigInteger(1, arg.getBytes(StandardCharsets.UTF_8)));
}

但在这之后我真的陷入了困境。

提前致谢

最佳答案

C# 代码:

  1. 将哈希值转换为其十六进制表示形式hashStr。要将字节数组转换为 Java 中的十六进制字符串,请参阅 this发布。
  2. 删除 BitConverter 引入的“-”。您不需要在 Java 中执行此操作,因为添加“-”是 BitConverter 特有的。
  3. hashStrstr 连接起来,中间用一个点来获取 token。这在 Java 中很简单:token = hashStr + "."+ str
  4. 将 token 转换为 Base64 编码。要在 Java 中执行此操作,请使用 Base64.encodeBase64String,如 example 中所做的那样。

您的代码是 referring to 不执行这些步骤。您是否考虑过将这些步骤添加到 Java 代码中?

关于java - 将安全 token 功能从 C# 重新创建为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339010/

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