公钥和私钥 生成地址:http://www.metools.info/code/c80.html
using System;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace ConsoleApp2
{
class Program
{
static string eventId = "A57";
static string userId = "330421998";
static string password = "jsyz330421998#zyb";
static string requestTime = DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss");
static string headSign = "";
static void Main(string[] args)
{
string str = eventId + requestTime + userId+password;
headSign = GenerateMD5(str);
/// <summary>
/// 发送数据
/// </summary>
string postText = @"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:ser='http://server.zhejian.com/'>
<soapenv:Header/>
<soapenv:Body>
<ser:all>
<!--Optional:-->
<arg0><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
<data>
<header>
<eventId>" + eventId + @"</eventId>
<hosId>" + userId + @"</hosId>
<requestTime>" + requestTime + @"</requestTime>
<headSign>" + headSign + @"</headSign>
<bodySign>" + RsaSign(body, privateKey) + @"</bodySign>
</header>" + body + @"</data>]]></arg0>
</ser:all>
</soapenv:Body>
</soapenv:Envelope>";
Console.WriteLine(headSign);
//SendPostRequestJson(postText);
var result= PostWebRequest("http://120.26.209.208:8083/data/ws/TJ?wsdl", postText,Encoding.UTF8);
Console.WriteLine(result);
Console.ReadLine();
}
private static string PostWebRequest(string postUrl, string paramData, Encoding dataEncode)
{
string ret = string.Empty;
try
{
byte[] byteArray = dataEncode.GetBytes(paramData); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
}
catch (Exception ex)
{
}
return ret;
}
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <param name="privatekey"></param>
/// <returns></returns>
public static string RsaSign(string data, string privatekey)
{
CspParameters CspParameters = new CspParameters();
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048, CspParameters);
byte[] bytes = Encoding.UTF8.GetBytes(data);
privatekey = RSA.ToXmlString(true);
RSA.FromXmlString(privatekey);
byte[] sign = RSA.SignData(bytes, "SHA256");
return Convert.ToBase64String(sign);
}
public static string Sign(string contentForSign, string privateKey)
{
//转换成适用于.Net的秘钥
//var netKey = privateKey;
var rsa = new RSACryptoServiceProvider();
privateKey = rsa.ToXmlString(true);
rsa.FromXmlString(privateKey);
//创建一个空对象
var rsaClear = new RSACryptoServiceProvider();
var paras = rsa.ExportParameters(true);
rsaClear.ImportParameters(paras);
//签名返回
using (var sha256 = new SHA256CryptoServiceProvider())
{
var signData = rsa.SignData(Encoding.UTF8.GetBytes(contentForSign), sha256);
return EncodeBase64("utf-8", BytesToHex(signData));
}
}
///编码
public static string EncodeBase64(string code_type, string code)
{
string encode = "";
byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code);
try
{
encode = Convert.ToBase64String(bytes);
}
catch
{
encode = code;
}
return encode;
}
public static string BytesToHex(byte[] data)
{
StringBuilder sbRet = new StringBuilder(data.Length * 2);
for (int i = 0; i < data.Length; i++)
{
sbRet.Append(Convert.ToString(data[i], 16).PadLeft(2, '0'));
}
return sbRet.ToString();
}
#region 测试字符串
/// <summary>
/// 私钥
/// </summary>
static string privateKey = @"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCl7G6LVrBEipA2Otcc6Ot/+xFUDXxaw2Vw57PWiDrLOUtL7ASEy5q9JKpt3E5YlxBwrHZasY6T9FAOtqK81YTJ1auZWxGgdXo0UygXwWxwtcbM6Mu2iKuMCMi1/yj23Htf6Q0e9/9N1Puik7iLF579AMvdpqlCih09cE41itM7DldOJbt9s0iqgJEXX/tmE83yXnX3E3cpuBDDsFRyB2Z4EMEpSlc1fxwQPOzt9aw2IF81gjNpkZ5ugGqAWbn89JO1rFpdrEVQVJDZbcq/2RacGRf+0BD0P1SuigRRT1W8mg1Ne57hFi9Lw9FaDTRYzKsVvkAk9euwRfwMkb+BgvDVAgMBAAECggEBAIEWzXqC22i4FTLb3HiVjoNnpjeqtlE3LDkHS5dhLbzmuno7Cdj3P1Bgsmf+usWZ4iSHSR2OfssFjTOlTD92L3WIU5VgkPox6/3BpLO2vNOD2UOa6sL82dp9CwrtlcVaDHK2MoshjvPS/GOkYjN1ETDt6a5s98rZAZ7HPVHSzDxozziGIc+py22MLmMcSx2bfZ0rAVOzf1Fk6/I3Fw4O5hMQJovfz6m73LMaKJ1dvy2qTMSpi71N6FNEaPxlaP0RpjrMga/NsvgxOxM7tTKfE/6+CHQvS9og0jjZS/t3PLpBbcGj1RlLPonUU6di6oU9FA3Y59RjXpB2aD03fvojnBECgYEAz1un2IF6qIJWyIv7lRR7iZAUtxSnikCjh2xz0/ufGNJEvmRjM7mVbKip7J5Qyvqo4AvqwrF6pYe2Cp7TILeMk3JC9PHD8JWXpM0LV2Ml2fMOT+tFlDwD3IDDuG2Fphib11qeMO0+wZkZ3f4MLKbjGKY9Fix6y0WBtcftZGmNSwMCgYEAzNiJmn8BM16mmbv1uvWuYfFq6RXuRSGc9GNpXHe+QjC9uT6ddLFL1uStjXU6Vf+r+1ymwwFs1vSA7d1ljhKFukVySmNVylOwtxY2GtgMrJg+DtFy1DwilawuLrSEGNQkP4h0176zI5sSZUrmfZo3Xh/UcLy3rr9KtSYtXLZNYUcCgYAY+FyaAd2XdTqmI9VD+pd11VfpRB940pfesvyvxlk+T/PfSY94pxyLXTQ5PkdUaiLz9/tpPp4aWOFfHgkmo3PWPag6fvKtghYkzlxTRalFObO7hAV4+FEuuILZLrctbUE3Cb6K/cbU4W7wAKvOpLosObiZdvnCiLg5/71iniNZqQKBgQC9QIFA3324fAXnmqPYawsFKgnf9ocAD6H2l7HL4EVC2c0uzA6ktPigPP2q51dSBLhbrqnTGAn6PkKvgBBHRg2OnoKM/2FPYCqvvDGYc2qiOrV68z7nnfdF2KGCPPyeA8DJgcSRXnoatzYzpxNzj3r/1uBql7AMHmdjHTZjpXmwGQKBgDJZjh4TofdulpU3PWOQfLLQUOtCePkjhQtQI06Buz25Ouk+DIMgRxwGnA44YX9kogAas78c32FdjT6Uyp";
/// <summary>
/// 代加签文本
/// </summary>
static string body = @"<body>hello</body>";
#endregion
/// <summary>
/// MD5字符串加密
/// </summary>
/// <param name="txt"></param>
/// <returns>加密后字符串</returns>
public static string GenerateMD5(string txt)
{
using (MD5 mi = MD5.Create())
{
byte[] buffer = Encoding.Default.GetBytes(txt);
//开始加密
byte[] newBuffer = mi.ComputeHash(buffer);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newBuffer.Length; i++)
{
sb.Append(newBuffer[i].ToString("x2"));
}
return sb.ToString();
}
}
}
}