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

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

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

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

参考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.Classes, System.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(codeLen: Integer): string;
    function AES_decrypt(const sEncodingAESKey, sMsgEncrypt: stringvar cpid: string): string;
    function AES_encrypt(const sEncodingAESKey, sMsg, cpid: string): 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 sToken, sTimeStamp, sNonce, sMsgEncrypt, sSigture,
      sAppID, sEncodingAESKey: stringvar sMsg: string): 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 sMsg, sToken, sAppID, sEncodingAESKey: string;
      var sMsgEncrypt: string): WXBizMsgCryptErrorCode;
  end;

完整代码下载地址:http://download.csdn.net/detail/netwizard/9421608

呵呵,看看效果图吧:

使用delphi+intraweb进行微信开发4—微信消息加解密相关推荐

  1. 微信第三方平台开发三(消息加解密)

    代码根本不需要自己写,微信提供示例代码,参数需要"公众号消息校验Token","公众号消息加解密Key" 我是用java写的,出现了下列问题 1.报错:java ...

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

    示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. 在上一讲当中我做了个简单的微信文本消 ...

  3. 微信开发:微信js_sdk 分享,前端部分(二)

    微信开发:微信js-sdk前端分享,代码如下: <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> ...

  4. 微信鉴权服务器地址,微信开发之微信授权登录

    本篇教程探讨了微信开发之微信授权登录,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作, ...

  5. php 微信 语音,PHP语言微信开发:微信录音临时转永久存储

    本文主要向大家介绍了PHP语言微信开发:微信录音临时转永久存储,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效.就 ...

  6. 微信开发 --- 调用微信上传图片接口,并保存到自己的服务器

    微信开发 - 调用微信上传图片接口,并保存到自己的服务器 整体思路是这样的: 1.先把手机上的图片上传到微信服务器,然后返回一个图片ID 2.在通过后台根据ID从微信后台拿到流,保存到服务器 前几个步 ...

  7. 微信公众平台开发(9)--消息加解密方式

    点此查看 微信公众号/微信网页/微信支付/企业微信/小程序开发合集及源代码下载 本文目录 1. 前言 2. 判断加解密方式 3. 测试 4. 小结 1. 前言 登录微信公众平台,点击[设置与开发]-[ ...

  8. 第2章 微信开发之微信项目

    微信官方文档,16年的时候开发微信公众号照着官网看,到了2017年发现了weixin-java-mp这个jar,当时使用的版本是2.9.0就继续使用了,今天看到的sonatype上面还在更新,已经发展 ...

  9. java调用微信加密_java微信消息加解密

    今天心血来潮就信手拈来学了下微信消息加解密的知识,忽然觉得微信真的好强大.可能在大部分项目微信消息的加解密都用不上,但是仍然不排除有使用到的情况,如涉及金钱方面的微信应用包括商城类.金融类还有其他安全 ...

最新文章

  1. 【Python】解决print不能立即打印的问题
  2. 纪念乔布斯,推出四期iPad、iphone赠书活动【第一期】
  3. Oracle常用系统表
  4. JSBridge的思考
  5. 详解python的super()的作用和原理
  6. Spring in Action 3 (翻译)
  7. 同事更新几个表_无法抵挡的帅气!西铁城潮酷光动能表
  8. 用C读取INI配置文件 (可在linux平台上用)
  9. C#获取 Flv视频文件播放时间长度等信息
  10. MATLAB等值线绘制
  11. 【无中生有】---14---用户行为监控系统嵌入
  12. 变异系数(Coefficient of Variation,COV)和协方差(Covariance, Cov)
  13. 为什么html中使用不了样式,css不起作用是什么原因?
  14. Latex的各种帽子
  15. 2006年美国商业科技创新250强-----SUN公司第六!
  16. 设计一可控同步四进制可逆计数器, 其由输入X1,X2控制, 用D触发器和74153及必要的门电路实现
  17. 数据结构——简单实现森林转化为二叉树
  18. [转载] Java是剑客-飘逸;.NET是刀客-霸道 (二)
  19. (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  20. 计算机机房内管线路由设计,大学生公寓FTTB宽带接入网综合设计

热门文章

  1. 【C#】Winform监听USB串口设备拔插
  2. 买新笔记本电脑,RJ45接口还香吗
  3. 转载:使用Spring进行数据访问(Data Access With Spring)
  4. Vxworks应用自启动
  5. Introduction to the calculus of variations
  6. JavaScript 日历
  7. clion在运行代码中出现CreateProcess error=193, %1 不是有效的 Win32 应用程序。
  8. windows命令提示符cmd常用命令
  9. 民用GPS精度不够的情况下是如何用于无人驾驶的
  10. 币圈再次受攻击损失400万美元,9000多个钱包被破解