以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何生成SHA1的数据签名串  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=160416)

--  作者:ajie5211
--  发布时间:2021/2/2 8:41:00
--  [求助]如何生成SHA1的数据签名串

金蝶给的例子如下:不知道如何用狐表生成signeddata

协议内容解析(演示例子中的参数协议,具体实际应用可以自定义,但基本参数不能缺少)
参数格式:ud=|dbid|username|appid|signeddata|timestamp[|lcid],其中ud为参数名;协议格式:|dbid|username|appid|signeddata|timestamp[|lcid]
dbid:数据中心的ID;username:用户名称;
appid:应用程序ID,通过Administrator登录数据中心后,在【系统管理】分类的【第三方系统登录授权】功能里面进行新增维护;
signeddata:数据签名串,通过公钥和用户数据进行运算得到,在后面有详细说明;
// signeddata公钥字符串,来自administrator管理中【第三方系统登陆授权】功能分配的加密钥匙
// 参数中secret为【第三方系统登陆授权】中自动分配的【应用密钥】
var signedData = Kingdee.BOS.Util.SHA1Util.GetSignature(
new string[] {
dbId, userName, appId, secret, timeStamp.ToString()
});
timestamp:登录时间戳(Unix时间戳,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数);
lcid(可选):语言ID,中文2052(默认),英文1033,繁体3076
.
ps: 如果使用的是其他语言,比如java等,可以参照下面算法生成数据签名串[signedData]:

以下内容为程序代码:

///


/// SHA1签名
///

///
///
public static string GetSignature(string[] arr)
{
//1. 将数组进行排序
//2. 将数组拼接成一个字符串进行sha1加密
arr = arr.OrderBy(z => z).ToArray();
var arrString = string.Join("", arr);
var sha1 = SHA1.Create();
var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));
StringBuilder enText = new StringBuilder();
foreach (var b in sha1Arr)
{
enText.AppendFormat("{0:x2}", b);
}

return enText.ToString();
}


--  作者:有点蓝
--  发布时间:2021/2/2 9:01:00
--  
转换为vb.net代码,补齐命名空间,放到全局代码使用:https://converter.telerik.com/