【问题标题】:Sha1 encryption of password when creating SOAP request in c#在 c# 中创建 SOAP 请求时密码的 Sha1 加密
【发布时间】:2019-09-11 10:41:14
【问题描述】:

我尝试使用 SOAP 集成到 Web 服务,但我陷入了授权部分,更具体地说是在创建 sha1 加密密码时。 此特定授权的文档可在 https://www.beautyfort.com/api/docs/AuthHeader-t1

找到

我一直在网上搜索,试图找到创建密码的不同方法,但似乎没有一种方法可以生成与文档页面中的示例相同的密码。

string testDateString = "2015-07-08T11:31:53+01:00";
string testNonce = "186269";
string testSecret = "Ok4IWYLBHbKn8juM1gFPvQxadieZmS2";

SHA1CryptoServiceProvider sha1Hasher = new SHA1CryptoServiceProvider();
byte[] hashedDataBytes = sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(testNonce + testDateString + testSecret));
string Sha1Password = Convert.ToBase64String(hashedDataBytes);

输入变量来自文档页面。根据文档,密码应该得到值“ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw==” 但我使用的代码正在生成“2HFr6Aowr4d4isL6sJw3F+vVP9M=".

有人知道我做错了什么吗?

【问题讨论】:

  • 他们也使用 UTF-8 吗?
  • 嗯。不知道,但如果我改为 Encoding.ASCII.GetBytes,我仍然会得到相同的(错误的)密码值。
  • 已确认。我只是试图通过蛮力找到正确的算法,但没有一个 SHA CryptoProviders 提供正确的长度(当然也没有值)。

标签: c# soap sha1


【解决方案1】:

我大胆猜测文档伪代码中“sha1()”的输出可能是一个十六进制字符串(如 PHP 中的 sha1() 等),这似乎输出了预期的密码。

更新代码:

string testDateString = "2015-07-08T11:31:53+01:00";
string testNonce = "186269";
string testSecret = "Ok4IWYLBHbKn8juM1gFPvQxadieZmS2";

SHA1CryptoServiceProvider sha1Hasher = new SHA1CryptoServiceProvider();
byte[] hashedDataBytes = sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(testNonce + testDateString + testSecret));

var hexString = BitConverter.ToString(hashedDataBytes).Replace("-", string.Empty).ToLower();
string Sha1Password = Convert.ToBase64String(Encoding.UTF8.GetBytes(hexString));

【讨论】:

  • 绝对精彩!谢谢!
猜你喜欢
  • 2011-03-03
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
相关资源
最近更新 更多