阿里区块链Hex.encode(RSAWithSHA256(message))签名

发布时间 2023-06-29 10:16:45作者: 晚霞起风了

using DemoTest;
using System.Net;
using System.Security.Cryptography;
using System.Text;

string fileaddress = AppContext.BaseDirectory + "file\\access.key";
Console.WriteLine(fileaddress);
Console.WriteLine(File.Exists(fileaddress));
string enkey = File.ReadAllText(fileaddress);
Console.WriteLine(enkey);
string AccessId = "5691fY06DQGRIXEH";
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
long t = (DateTime.Now.Ticks - startTime.Ticks) / 10000; //除10000调整为13位
Console.WriteLine(t);
string tstr = AccessId + t;
// 创建 SHA256 实例
SHA256 sha256 = SHA256.Create();
// 计算消息的摘要
byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(tstr));
// 创建 RSA 实例
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(OtherLib.RSAPrivateKeyJava2DotNet(enkey));
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(rsa);
formatter.SetHashAlgorithm("SHA256");//此处是你需要加签的hash算法,需要和上边你计算的hash值的算法一致,不然会报错。
byte[] inArray = formatter.CreateSignature(hash);
// 将签名转换成 Hex 编码的字符串
string signatureHex = BitConverter.ToString(inArray).Replace("-", string.Empty).ToLower();
string json = "{ \"accessId\":\"" + AccessId + "\",\"secret\":\"" + signatureHex + "\",\"time\":\"" + t + "\"}";
Console.WriteLine(json);
//请求的http地址
string url = "https://rest.baas.alipay.com/api/contract/shakeHand";
//预备请求的资源
HttpWebRequest request = null;
HttpWebResponse response = null;
//post请求需要一个流把数据写进去
Stream requestStream = null;
StreamReader reader = null;
//request所携带的数据是字节码,所以msg需要转化为byte[]数组才能读入
var data = Encoding.UTF8.GetBytes(json);
string content = string.Empty;
try
{
//实例化一个http请求
request = (HttpWebRequest)WebRequest.Create(url);
//设置请求头 请求方式method=post
request.Method = "POST";
//请求类型
request.ContentType = "application/json;charset=UTF-8";
request.Headers.Add("Content-Type", "application/json;charset=UTF-8");
requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
response = (HttpWebResponse)request.GetResponse();
//reader 读取响应流
using (reader = new StreamReader(response.GetResponseStream()))
{
content = reader.ReadToEnd();
}
}
catch (System.Exception err)
{
Console.WriteLine("1.POST出现了错误!\n错误来源:" + err.Source + "错误信息:" + err.Message);
}
Console.WriteLine("响应:" + content);
// 输出签名和公钥
Console.WriteLine("Message: " + tstr);
Console.WriteLine("Signature (Hex): " + signatureHex);
}