2.消息体加密

每一个具体接口入参的全都都在公共参数【Message】节点中,其中【Message】的格式是经过aes加密后转成Base64数据格式,其中【加密密钥】是由接口提供方提供,aes加密中的加密向量不需要。

步骤如下:

1:将非公共参数转成标准的json字符串,示例代码:

string orderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"); //生成单号

OrderInputDto orderInputDto = new OrderInputDto
{
OrderNo = orderNo,
NotifyUrl = "http://localhost:33692/order/PushStatus", //订单状态通知地址
ImgUrls = new List<Img> {
new Img { Name = "七夕 情人节 埃菲尔铁塔模型 咖啡 爱心 红色玫瑰 花瓣 图片",Url = "http://pic.netbian.com/uploads/allimg/160827/225105-1472309465a527.jpg" },
new Img { Name = "2017中国·遵义国际辣椒博览会-新华网", Url = "https://tse4-mm.cn.bing.net/th/id/OIP.YHC86ivjAKCTdBKz94nrnQHaDo?w=348&h=171&c=7&o=5&pid=1.7" }
}
};
string json = orderInputDto.ToJsonString();

2:将步骤一的字符串进行AES256加密以后转为Base64字符串,之后再进行UrlEncode编码,示例代码如下:

string message = AesHelper.Encrypt(orderInputDto.ToJsonString(), aesKey).ToUrlEncode();

/// <summary>
/// 加密字符串,输出为Base64字符串
/// </summary>
/// <param name="source">需要加密的字符串</param>
/// <param name="key">加密密钥</param>
/// <param name="needIV">是否需要向量</param>
/// <returns></returns>
public static string Encrypt(string source, string key, bool needIV = false)
{
byte[] decodeBytes = source.ToBytes();
byte[] encodeBytes = Encrypt(decodeBytes, key, needIV);
return Convert.ToBase64String(encodeBytes, 0, encodeBytes.Length);
}