gpt4 book ai didi

c# - 尝试将 Base64 字符串作为字节传递

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:17 25 4
gpt4 key购买 nike

请帮忙。我需要将 3 个值传递给网络服务:

  • RptDate(string),
  • 用户ID(字符串),
  • 密码哈希(base64Binary)

这个 PassHash 是我的问题,因为 PassHash 应该是用户 ID 和密码连接在一起(UserIDPassword),然后计算二进制 MD5这个值的散列,然后将这个散列值转换为 Base64 解码字符串。 下面我的 C# 代码显示了我目前所拥有的示例。

protected void btnSubmit_Click(object sender, EventArgs e) {
string UnameVal = "BSimpson";
string PwordVal = "Springfield";
string ReportDate = "2015-12-25";
string source = string.Concat(UnameVal, PwordVal);
string hashed = getMd5Hash2(source);
byte[] ph1 = System.Text.Encoding.UTF8.GetBytes(hashed);

//Build Hyperlink...
var sb = new StringBuilder();
sb.AppendFormat("https://ExampleService/GetRptLength?ReportDate={0}&UserID={1}&PassHash={2}", ReportDate, UnameVal, ph1);
HyperLink1.Visible = true;
HyperLink1.NavigateUrl = sb.ToString();
}

static string getMd5Hash2(string input) {
// Create a new instance of the MD5CryptoServiceProvider object.
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();

// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();

// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++) {
sBuilder.Append(data[i].ToString("x2"));
}

// Return the hexadecimal string.
return sBuilder.ToString();
}

这里是 the result建立超链接。

当我提交此链接时,它指出我有一个“无效的密码哈希值”。 PassHash 不应该有一个值而不仅仅是 System.Byte[] 吗?我在这里做错了什么?

最佳答案

您需要获取字节数组并将其转换为 base64 字符串,因为字节数组不会具有由其 .ToString() 方法给出的有效表示形式。

您可以通过以下方式做到这一点:

var passwordHashInBase64 = System.Convert.ToBase64String(ph1);

然后只需将 passwordHashInBase64 传递给您的字符串生成器而不是 ph1

编辑:

仔细查看您的代码,您似乎在这里采取了额外的步骤。在您的 getMd5Hash2 函数中,在这一行之后:

byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

添加return System.Convert.ToBase64String(data);

并删除 stringbuilder/十六进制表示。

然后,在您的提交事件中,不必担心从 hashed 中获取字节,只需将该字符串作为您的哈希值传递即可。

sb.AppendFormat("https://ExampleService/GetRptLength?ReportDate={0}&UserID={1}&PassHash={2}", ReportDate, UnameVal, hashed);

关于c# - 尝试将 Base64 字符串作为字节传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502614/

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