消息体加密
随着微信服务开发在越来越多的领域应用,应用的安全性逐渐被重视起来。本文主要阐述如何为微信的消息加密的原理与Java版本的实现。
原理
做过微信开发的朋友们都知道,微信使用xml格式的消息结构。这里着重说一下最核心的收发消息。
在明文模式中,POST请求有signature,timestamp,nonce三个参数。它的Body为一个XML:
1348831860
1234567890123456
而在加密模式中,增加了两个参数:encrypt_type 和 msg_signature 。它的Body 也变更为:
其中encryptData是加密后的信息,通过我们在微信开发平台配置的EncodingAESKey,Token,以及自动生成的AppID,通过加密算法,可以验证信息的真实性,并且将真实的信息,解析成如明文的格式的XML。整条信息是加密的,因此不用担心被伪造,否则,会有风险。
PS:会有怎样的风险?如果是Token被人猜出来进而伪造内容,加密模式中的EncodingAESKey不会么?还是担心消息类型会泄露?没太想明白,希望路过的大神指点
不管怎么说,加密看起来更安全些,我现在做一个金融类的项目,有备无患,就使用了加密的功能。
代码实现
微信提供了一个各种语言的解析,我在上面稍微封装了一下:
public class SignUtil {
/**
* 与开发模式接口配置信息中的Token保持一致
*/