123 lines
4.3 KiB
C#
123 lines
4.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
|
|
namespace ConsoleDemo
|
|
{
|
|
public class PublicData
|
|
{
|
|
/**
|
|
* 公共报文组装
|
|
*/
|
|
public static string publicparam(string content,string platformCode ,
|
|
string platformAlias,string privateKey,string password)
|
|
{
|
|
StringBuilder sign =new StringBuilder();
|
|
string contentstr=EncryptDes.Encrypt3Des(content, password);
|
|
sign.Append("content="+contentstr+"&");
|
|
sign.Append("format=JSON&");
|
|
sign.Append("platformCode="+platformCode+"&");
|
|
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
string serianlNo = platformAlias + time + GenerateCheckCode(8);
|
|
sign.Append("serialNo="+serianlNo+"&");
|
|
sign.Append("signType=RSA&");
|
|
string timestamp=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
sign.Append("timestamp="+timestamp+"&");
|
|
sign.Append("version=1.0");
|
|
string rsasign = RSA.sign(sign.ToString(), privateKey);
|
|
Hashtable publictable=new Hashtable();
|
|
publictable.Add("sign",rsasign);
|
|
publictable.Add("format","JSON");
|
|
publictable.Add("platformCode",platformCode);
|
|
publictable.Add("serialNo",serianlNo);
|
|
publictable.Add("signType","RSA");
|
|
publictable.Add("timestamp",timestamp);
|
|
publictable.Add("version","1.0");
|
|
publictable.Add("content",contentstr);
|
|
return ToJson.Table2Json(publictable);
|
|
}
|
|
|
|
public static string disposeResponse(string str,string ptpublickey, string deskey)
|
|
{
|
|
|
|
Hashtable strtable=new Hashtable();
|
|
StringBuilder content=new StringBuilder();
|
|
Hashtable dispose=new Hashtable();
|
|
|
|
string sign = "";
|
|
string serialNo = "";
|
|
str=str.Replace("{","").Replace("}","").Replace("\"","").Replace(",","&").Replace(":","&");
|
|
string[] arraystr = str.Split('&');
|
|
|
|
for (int i = 0; i < arraystr.Length-1; i+=2)
|
|
{
|
|
if (arraystr[i]=="sign")
|
|
{
|
|
sign = arraystr[i + 1];
|
|
}
|
|
if (arraystr[i]=="serialNo")
|
|
{
|
|
serialNo=arraystr[i + 1];
|
|
}
|
|
strtable.Add(arraystr[i],arraystr[i+1]);
|
|
}
|
|
strtable.Remove("serialNo");
|
|
strtable.Remove("sign");
|
|
ArrayList ke = new ArrayList(strtable.Keys);
|
|
ke.Sort();
|
|
foreach (string tableEntry in ke)
|
|
{
|
|
content.Append(string.Format("{0}={1}&", tableEntry, strtable[tableEntry]));
|
|
}
|
|
content.Append("serialNo=" + serialNo);
|
|
bool res=RSA.verify(content.ToString(), sign, ptpublickey, "UTF-8");
|
|
Console.WriteLine(res);
|
|
if (res)
|
|
{
|
|
for (int i = 0; i < arraystr.Length - 1; i += 2)
|
|
{
|
|
if (arraystr[i] == "content")
|
|
{
|
|
|
|
arraystr[i+1]=EncryptDes.Decrypt3Des(arraystr[i+1],deskey);
|
|
}
|
|
dispose.Add(arraystr[i],arraystr[i+1]);
|
|
|
|
}
|
|
return ToJson.Table2Json(dispose);
|
|
|
|
}
|
|
else
|
|
{
|
|
return "验签失败";
|
|
}
|
|
}
|
|
/**
|
|
* 随机数生成
|
|
*/
|
|
private static string GenerateCheckCode(int codeCount)
|
|
{
|
|
int rep = 0;
|
|
string str = string.Empty;
|
|
long num2 = DateTime.Now.Ticks + rep;
|
|
rep++;
|
|
Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
|
|
for (int i = 0; i < codeCount; i++)
|
|
{
|
|
char ch;
|
|
int num = random.Next();
|
|
if ((num % 2) == 0)
|
|
{
|
|
ch = (char)(0x30 + ((ushort)(num % 10)));
|
|
}
|
|
else
|
|
{
|
|
ch = (char)(0x41 + ((ushort)(num % 0x1a)));
|
|
}
|
|
str = str + ch.ToString();
|
|
}
|
|
return str;
|
|
}
|
|
}
|
|
} |