转载:使用delphi+intraweb进行微信开发4—微信消息加解密

示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改。

 

上一讲当中我做了个简单的微信文本消息回显应用,当时是以微信明文方式实现的,其实微信推荐的是消息应该加密传输以增加安全性,所以这讲说说微信消息的加解密。

在微信的帮助页面上可以下载微信消息加解密的例程,可惜的是没有Delphi语言的示例,网上搜索一番,没有人贡献出写好的Delphi版的微信加解密算法单元,好在有官方示例的C#版的,那就按照C#的改一个吧。

微信消息是以AES算法进行的加密处理,而遗憾的是Delphi并没有内置的AES算法单元,必须找第三方实现的,不过一般第三方实现的算法都因为种种原因并不完善,需要使用者酌情修改,所以在基础算法支持上Delphi确实和.net以及java这类的开发语言比不了。

呵呵,上网找Delphi版AES算法吧。在在这里要感谢cnpack开发组,他们不但推出一流的delphi开发环境增强组件还有开源组件包cnvcl,这个组件包中有SHA1、AES、MD5等多种算法单元,我打开AES算法单元查看,发现封装的很完美,ECB、CBC模式均支持,呵呵,幸福了02B69EAC

参考C#示例代码一通修改测试,省略几昼夜苦干的吐槽终于开花结果:

呵呵,这个或者是网上目前唯一的开源的Delphi版的微信加解密算法单元吧,激动!

{*****************************************************************************} 
{                                                                             } 
{       泛思微平台                                                            } 
{                                                                             } 
{       版权所有 (C) 2016 石家庄泛思电子商务有限公司                          } 
{                                                                             } 
{       微信消息加密解密单元,使用DelphiXE2版本编写                           } 
{       作者:Delphi力量                                                      } 
{       QQ:404328970                                                         } 
{       EMail: heblxy@163.com                                                 } 
{       Blog:www.cnblogs.com/dpower                                          } 
{       参考链接:                                                            } 
{       http://mp.weixin.qq.com/wiki/14/70e73cedf9fd958d2e23264ba9333ad2.html } 
{                                                                             } 
{*****************************************************************************} 

unit uWxMsgCrypt

interface 

uses 
  System.ClassesSystem.SysUtils

type 
  WXBizMsgCryptErrorCode 
    WXBizMsgCrypt_OK 0
    WXBizMsgCrypt_ValidateSignature_Error -40001
    WXBizMsgCrypt_ParseXml_Error -40002
    WXBizMsgCrypt_ComputeSignature_Error -40003
    WXBizMsgCrypt_IllegalAesKey -40004
    WXBizMsgCrypt_ValidateAppid_Error -40005
    WXBizMsgCrypt_EncryptAES_Error -40006
    WXBizMsgCrypt_DecryptAES_Error -40007
    WXBizMsgCrypt_IllegalBuffer -40008
    WXBizMsgCrypt_EncodeBase64_Error -40009
    WXBizMsgCrypt_DecodeBase64_Error -40010 
  ); 

  /// <summary> 
  /// 提供微信加密消息解密和微信明文消息加密功能 
  /// </summary> 
  TWxMsgCrypt class 
  private 
    function CreateRandCode(codeLenInteger): string
    function AES_decrypt(const sEncodingAESKeysMsgEncryptstringvar cpidstring): string
    function AES_encrypt(const sEncodingAESKeysMsgcpidstring): string
  public 
    /// <summary> 
    /// 解密微信消息 
    /// </summary> 
    /// <param name="sToken">Token,看公众号设置</param> 
    /// <param name="sTimeStamp">时间戳,随微信消息一起传入,可以通过Url参数获取</param> 
    /// <param name="sNonce">随机字符串,随微信消息一起传入,可以通过Url参数获取</param> 
    /// <param name="sMsgEncrypt">微信消息xml的Encrypt字段内容</param> 
    /// <param name="sSigture">签名,随微信消息一起传入,可以通过Url参数获取</param> 
    /// <param name="sAppID">AppID,看公众号设置</param> 
    /// <param name="sEncodingAESKey">EncodingAESKey,看公众号设置</param> 
    /// <param name="sMsg">sMsg: 解密后的Encrypt字段内容原文,当return返回WXBizMsgCrypt_OK时有效</param> 
    /// <returns>成功WXBizMsgCrypt_OK,失败返回对应的错误码</returns> 
    function DecryptMsg(const sTokensTimeStampsNoncesMsgEncryptsSigture
      sAppIDsEncodingAESKeystringvar sMsgstring): WXBizMsgCryptErrorCode

    /// <summary> 
    /// 加密微信消息 
    /// </summary> 
    /// <param name="sMsg">全部xml内容(明文)</param> 
    /// <param name="sAppID">AppID,看公众号设置</param> 
    /// <param name="sEncodingAESKey">EncodingAESKey,看公众号设置</param> 
    /// <param name="sMsgEncrypt">sMsgEncrypt: 输出的是加密后的全部xml(可以直接发送无需再编组xml),当return返回WXBizMsgCrypt_OK时有效</param> 
    /// <returns>成功WXBizMsgCrypt_OK,失败返回对应的错误码</returns> 
    function EncryptMsg(const sMsgsTokensAppIDsEncodingAESKeystring
      var sMsgEncryptstring): WXBizMsgCryptErrorCode
  end

implementation 

uses 
  CnSHA1EncdDecdCnAESSystem.MathuWxGlobal

{ TWxMsgCrypt } 

function TWxMsgCrypt.AES_decrypt(const sEncodingAESKeysMsgEncryptstringvar cpidstring): string
var 
  aEncodingAESKeyStrsInputAnsiString

转载于:https://www.cnblogs.com/zeromuisc/articles/5495829.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值