微信号:rigongyizu365

介绍:一线码农不端不装的「日拱一卒」,关注技术、书籍、创业、GTD、以及一切个人成长周边的话题,每周一到五更新.

加密数据解密算法(Ruby实现) | 小程序

2017-01-10 23:41 lazybios

小程序与原生APP之间可以通过微信第三方登录授权进行账号打通,这篇就来说说如何使用Ruby语言对接口返回的加密数据进行对称解密。

小程序官方文档中,给出的解密算法如下:

  • 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。

  • 对称解密的目标密文为 Base64_Decode(encryptedData),

  • 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节

  • 对称解密算法初始向量 iv 会在数据接口中返回。

描述看起来不太易于理解,不过好在微信官方提供了4类语言的解密demo(C++、Node、PHP、Python),显然这里面忽略了Ruby,于是在这里补充一份,代码如下:

require "openssl"
require "base64"
require "json"


class WXBizDataCrypt
  attr_accessor :app_id, :session_key

  def initialize(app_id, session_key)
    @app_id = app_id
    @session_key = session_key
  end

  def decrypt(encrypted_data, iv)
    session_key = Base64.decode64(@session_key)
    encrypted_data= Base64.decode64(encrypted_data)
    iv = Base64.decode64(iv)

    cipher = OpenSSL::Cipher::AES128.new(:CBC)
    cipher.decrypt
    cipher.key = session_key
    cipher.iv = iv

    decrypted = JSON.parse(cipher.update(encrypted_data) + cipher.final)
    raise('Invalid Buffer') if decrypted['watermark']['appid'] != @app_id

    decrypted
  end
end

用法跟上面四类语言给出的范例一致,碍于篇幅的限制,demo代码放到了Github上,有兴趣的可以文末搭梯子自行翻阅。

-完-

您还可以看:

Rails: Strong Parameters机制

关于Github的两个小技巧 | 三分钟

Git:「小步快跑」的开发模式

使用存储过程 | MySQL

Rails: 使用Scope进行查询

参考引用


 
日拱一卒 更多文章 一张emoji帮你搞懂map、filter、reduce | 有用功 git-diff美化工具diff-so-fancy | Git git-diff美化工具diff-so-fancy | Git 2017年RoR技术栈流行趋势报告 | Rails 2017年RoR技术栈流行趋势报告 | Rails
猜您喜欢 Varnish从菜鸟到专家(一) Spark函数讲解:aggregate 谈谈品牌(下) 在可滑动列表中实现视频播放 2016年3月9日,今日石油资讯。