在 C# 中创建 SOAP 请求时密码的 Sha1 加密

Sha1 encryption of password when creating SOAP request in c#

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

中找到

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

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=”。

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

我大胆猜测文档伪代码中 "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));