小程序加密数据解密失败问题 (Ruby 版)

小程序加密数据解密失败问题 (Ruby 版)

问题描述

Rails 实现的小程序后台,在做原生 APP 与小程序用户数据打通需求时,遇到了偶发性微信加密数据解密失败的情况。是的没错,解密失败的情况是偶发的!!!。报错信息如下:

OpenSSL::Cipher::CipherError: bad decrypt

就是处在了final那里。

微信给的解密算法

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

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

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

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

文档地址,文档里还提供了 Node、Python、C++、Java 的示例代码,没准能用的上。

Ruby 实现的解密算法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

测试代码require './wx_biz_data_crypt'

app_id = 'wx4f4bc4dec97d474b'

iv = 'r7BXXKkLb8qrSNn05n0qiA=='

session_key = 'tiihtNczf5v6AKRyjwEUhQ=='

encrypted_data =

'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM'+

'QmRzooG2xrDcvSnxIMXFufNstNGTyaGS'+

'9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+'+

'3hVbJSRgv+4lGOETKUQz6OYStslQ142d'+

'NCuabNPGBzlooOmB231qMM85d2/fV6Ch'+

'evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6'+

'/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw'+

'u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn'+

'/Hz7saL8xz+W//FRAUid1OksQaQx4CMs'+

'8LOddcQhULW4ucetDf96JcR3g0gfRK4P'+

'C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB'+

'6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns'+

'/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd'+

'lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV'+

'oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG'+

'20f0a04COwfneQAGGwd5oa+T8yO5hzuy'+

'Db/XcxxmK01EpqOyuxINew=='

pc = WXBizDataCrypt.new(app_id, session_key)

puts pc.decrypt(encrypted_data, iv)

这里执行这个测试代码是可以通过的,不过不要被它给蒙蔽了,实际生产环境里会有偶发的报错,错误比例大概是 5/1 的样子。在搜解决方案的时候遇到一个用 Node 的同学也有类似问题地址,求问最近有没有人遇到类似的问题,或者有啥解决线索提供没。 拜谢~

相关手记

菠菜365定位 K470次列车时刻表

K470次列车时刻表

10-21 👁️ 5249
菠菜365定位 浙江省温州市永嘉县沙头镇码砗村
beat365手机版客户端ios 北京石碑胡同房价怎么样? 石碑胡同房源|户型图|小区车位|交通地址详情分析!
beat365手机版客户端ios 诛仙神域怎么进去中州(诛仙3怎么从神域出来)
365APP 索尼z3换电池多少钱(z3手机换电池多少钱)
beat365手机版客户端ios C罗世界杯进球回顾:传奇球星的进球瞬间与辉煌历程