微信消息体签名及加解密功能详细解析以及.net实现
前言
微信消息体签名及加密功能已上线,明文传输确实存在安全风险,鉴于微信的用户范围使用之广泛,必定会成为众矢之的。所以大家还是尽快接入安全模式为好。仔细阅读官方接入指南,发现这次安全升级只是涉及到用户在微信对话窗口中与公众好消息交互,所以此次升级还是比较简单的。下面为大家一一道来。
一、功能解析
微信消息体签名及加密功能已上线,出于安全考虑,强烈建议您尽快接入消息加密功能,消除安全风险。详见公告。公众平台接口调试工具已经全面支持消息体加密功能的在线调试,可以在http://mp.weixin.qq.com/debug,“接口类型”选择消息接口调试,并在“加密调试”选择兼容模式或者安全模式,在线调试消息体加解密功能。
公众号直接调用微信服务器的接口除外,因为已经全部使用https协议。
/// <summary>
/// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML。
/// 完整版:https://github.com/night-king/we ... WeixinController.cs
/// </summary>
[HttpPost]
[ActionName("Index")]
public ActionResult Post(string signature, string timestamp, string nonce, string echostr)
{
WeixinMessage message = null;
var safeMode = Request.QueryString.Get("encrypt_type") == "aes";
using (var streamReader = new StreamReader(Request.InputStream))
{
var decryptMsg = string.Empty;
var msg = streamReader.ReadToEnd(); #region 解密
if (safeMode)
{
var msg_signature = Request.QueryString.Get("msg_signature");
var wxBizMsgCrypt = new WXBizMsgCrypt(WeixinConfig.Token, WeixinConfig.EncodingAESKey, WeixinConfig.AppID);
var ret = wxBizMsgCrypt.DecryptMsg(msg_signature, timestamp, nonce, msg, ref decryptMsg);
if (ret != 0)//解密失败
{
//TODO:开发者解密失败的业务处理逻辑
//注意:本demo用log4net记录此信息,你可以用其他方法
LogWriter.Default.WriteError(string.Format("decrypt message return {0}, request body {1}", ret, msg));
}
}
else
{
decryptMsg = msg;
}
#endregion message = AcceptMessageAPI.Parse(decryptMsg);
}
var response = new WeixinExecutor().Execute(message);
var encryptMsg = string.Empty; #region 加密
if (safeMode)
{
var msg_signature = Request.QueryString.Get("msg_signature");
var wxBizMsgCrypt = new WXBizMsgCrypt(WeixinConfig.Token, WeixinConfig.EncodingAESKey, WeixinConfig.AppID);
var ret = wxBizMsgCrypt.EncryptMsg(response, timestamp, nonce, ref encryptMsg);
if (ret != 0)//加密失败
{
//TODO:开发者加密失败的业务处理逻辑
LogWriter.Default.WriteError(string.Format("encrypt message return {0}, response body {1}", ret, response));
}
}
else
{
encryptMsg = response;
}
#endregion return new ContentResult
{
Content = encryptMsg,
ContentType = "text/xml",
ContentEncoding = System.Text.UTF8Encoding.UTF8
};
}
注意:WXBizMsgCrypt为官方提供的C#版本的AES加密解密类,你可以在这里下载这些文件。
微信消息体签名及加解密功能详细解析以及.net实现的更多相关文章
- C#微信公众号开发系列教程三(消息体签名及加解密)
http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...
- 微信消息体加解密及EncodingAESKey
公众平台消息体签名及加解密方案概述 1.新增消息体签名验证,用于公众平台和公众账号验证消息体的正确性 2.针对推送给微信公众账号的普通消息和事件消息,以及推送给设备公众账号的设备消息进行加密 3.公众 ...
- Spring Cloud Config 配置中心 自动加解密功能 jasypt方式
使用此种方式会存在一种问题:如果我配置了自动配置刷新,则刷新过后,加密过后的密文无法被解密.具体原因分析,看 SpringCloud 详解配置刷新的原理 使用 jasypt-spring-boot- ...
- SpringBoot中如何灵活的实现接口数据的加解密功能?
数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密.解密的方式. 本文目录 一.加密方案介绍二.实现原理三.实战四.测试五.踩到的坑 一.加密方 ...
- Spring Cloud Config 配置中心 自动加解密功能 JCE方式
1.首先安装JCE JDK8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.h ...
- java实现根据特定密钥对字符串进行加解密功能
在项目中我们经常遇到这样的场景,我们避免重要资源泄露需要将一些信息按照特定的方式(密钥)进行加密保存,然后在使用的时候再按照特定的方式(密钥)进行解密读取,以保证信息的相对安全.那么如何对信息进行加解 ...
- PHP自动加载功能原理解析
前言 这篇文章是对PHP自动加载功能的一个总结,内容涉及PHP的自动加载功能.PHP的命名空间.PHP的PSR0与PSR4标准等内容. 一.PHP自动加载功能 PHP自动加载功能的由来 在PHP开发过 ...
- 通过T-SQL语句实现数据库加解密功能
CREATE TABLE [dbo].[Users] ( [U_nbr] NVARCHAR(20) NOT NULL PRIMARY KEY, [Pwd] nvarchar(MAX) ) --加密 D ...
- ASE加解密算法详细介绍
AEC扫盲主要增对CBC模式做详细讲解: https://blog.csdn.net/qq_28205153/article/details/55798628 AEC其他几种模式详细介绍 https: ...
随机推荐
- HDU1163 Eddy's digital Roots【九剩余定理】
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 【SICP归纳】2 高阶函数和数据抽象
上一篇博文相应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么. 书中展示了非常多有趣的句法(syntax). 如今我们要让思想进一步的抽象.写这篇博客的时候并未学完整本书.更不敢说 ...
- 动态Lambda进阶一
直接上代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- Tomcat启动错误,端口占用
错误信息: Several ports (8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- iframe页面控制父页面跳转
<script> window.onload=function(){ window.location.href="http://www.baidu.com"; ...
- CMake入门(二)
CMake入门(二) 最后更新日期:2014-04-25 by kagula 阅读前提:<CMake入门(一)>.Linux的基本操作 环境: Windows 8.1 64bit英文版.V ...
- 快速排序:升序+降序----java实现
快速排序思路:先把第一个元素令为low下标,最后一个为high下标.并把第一个元素令为temp来作为标准元素.以标准元素来调整数组,使比标准元素小的都在标准元素前,比标准元素大的都在标准元素后.这样一 ...
- A simple Test Client built on top of ASP.NET Web API Help Page
Step 1: Install the Test Client package Install the WebApiTestClient package from the NuGet Package ...
- DevExpress 12.1 换肤 超级简单的方法(2013-11-5版)
本例子是按照DevExpress 12.1 版本 进行演示.请先准备好DevExpress.BonusSkins.v12.1.dll 和DevExpress.Utils.v12.1.dll 1.首先添 ...
- vijos 1234 口袋的天空
最小生成树kruscal算法 #include<iostream> #include<algorithm> #include<cstring> #define ma ...