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

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 = "AccessId ";
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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值