引入加密:
import JSEncrypt from "jsencrypt";
import Qs from 'qs'
package.json:中jsencrypt的版本号:
代码:
request(options) {
// options.data = Qs.stringify(options.data);
//接口参数加密(地址传参加密)
var encrypt = new JSEncrypt();
encrypt.setPublicKey(
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmb2bXhcfeiosnxs0bD17isalelyS2/0xKQdJUVUyMdt+/5Inm/S5upDFrliMs3i9zj3PtJWO7yzRfiBnoDNlOfTqPNY6DI9FXnhDgjQMJhp1Zbhl7d74E63CBVTU6Deocqfy/KCiPjQnpTzln89Mm7eE3WbvlmvX3mO7uD2/geQIDAQAB"
);
if (options.params) {
options.params = encrypt.encrypt(Qs.stringify(options.params));
}
const instance = axios.create()
options = Object.assign(this.getInsideConfig(), options)
this.interceptors(instance, options.url)
return instance(options)
}
第二、服务端解密:
1、创建解密类文件CustomerMessageProcesssingHandler.cs
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web;
namespace Web.App_Start
{
public class CustomerMessageProcesssingHandler : MessageProcessingHandler
{
public static string RSADecrypt(string privateKey, string content)
{
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherBytes;
rsa.FromXmlString(privateKey);
cipherBytes = rsa.Decrypt(Convert.FromBase64String(content), false);
rsa.Dispose();
return Encoding.UTF8.GetString(cipherBytes);
}
catch (Exception)
{
return content;
}
}
/// <summary>
/// 解密Url请求
/// </summary>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
protected override HttpRequestMessage ProcessRequest(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Options)
{
return request;
}
if (request.RequestUri.AbsolutePath.Contains("GetOAuthForUserInfo"))
{
return request;
}
var contentType = request.Content.Headers.ContentType;
//获取私钥
//string privateKey = Encoding.UTF8.GetString(Convert.FromBase64String(CommonMethod.GetPrivateKey()));
string privateKey = "<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent><P>/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==</P><Q>6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==</Q><DP>ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==</DP><DQ>MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==</DQ><InverseQ>EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==</InverseQ><D>vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=</D></RSAKeyValue>";
string baseQuery = request.RequestUri.Query;
if (string.IsNullOrWhiteSpace(baseQuery))
{
return request;
}
else
{
//读取请求 url query数据
baseQuery = baseQuery.Substring(1);
baseQuery = Regex.Match(baseQuery, "(sign=)*(?<sign>[\\S]+)").Groups[2].Value;
baseQuery = RSADecrypt(privateKey, HttpUtility.UrlDecode(baseQuery.Substring(2)));
//将解密后的URL重置解密后的URL请求
request.RequestUri = new Uri($"{request.RequestUri.AbsoluteUri.Split('?')[0]}?{baseQuery}");
return request;
}
}
protected override HttpResponseMessage ProcessResponse(HttpResponseMessage response, CancellationToken cancellationToken)
{
return response;
}
}
}
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Http.Cors;
namespace Web.App_Start
{
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new CustomerMessageProcesssingHandler());
#region 跨域配置
var allowedMethods = ConfigurationManager.AppSettings["cors:allowedMethodes"];
var allowedOrigin = ConfigurationManager.AppSettings["cors:allowedOrigin"];
var allowedHeaders = ConfigurationManager.AppSettings["cors:allowedHeaders"];
var Cors = new EnableCorsAttribute(allowedOrigin, allowedHeaders, allowedMethods)
{
SupportsCredentials = true
};
config.EnableCors(Cors);
#endregion
}
}
}
3、Global.asax.cs文件配置
代码:
GlobalConfiguration.Configure(WebApiConfig.Register);