微信小程序 encryptedData 解密报错 ILLEGAL_BUFFER 原因

微信小程序 encryptedData 解密报错 ILLEGAL_BUFFER 原因,第1张

这种情况偶发,一般发生在隔一段时间之后第一次登录时。

导致问题的原因是 getUserInfo 放在了 wx.login 之前。 getUserInfo 获取到 iv 和 encryptedData 传给后台。wx.login调用时用户的 session_key 可能会被更新而致使旧 session_key 失效。这样后台再去解密的时候就等于在用新的 session_key 去解密旧的 session_key 加密的数据,就会报 ILLEGAL_BUFFER 错误。

正常的流程应该是:

很容易错写成在 wx.getUserInfo 的回调里再调 wx.login 拿 code 再发送给服务器,这样 getUserInfo 里的 data 加密用的session_key就有可能跟解密的时候的 session_key 不一致,因为 wx.login 有可能会刷新了 session_key

建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

环境:

客户端:cocos creator + socket-io + protobufjs 

服务器:nodejs + socked-io + protobufjs 

protobujs使用的是生成好的静态js文件

问题:

    今天在测试的时候发现客户端发给服务器的buffer数据后,服务器解析过程出错,总提示“Error: illegal buffer at *** create_typed_array”这种类似问题,同样的服务器发给客户端,客户端解析时也会提示。

    一开始不知道怎么回事,就一顿度娘和谷歌,也没查到怎么回事,偶然发现了一片帖子中提到uint8arry的问题,便回头看了一下提示错误的地方,看了一下源码,如下:

在create_array的时候先判断了Uint8Array是不是undefined的,如果不是,就开始创建。问题就是出现在用buffer创建的地方。

问题就出现在这个我们发给服务器的buffer上,encode的时候buffer中什么样的类型都有,不仅仅是Uint8Array,还会有Uint32Array。

所以想到的解决办法如下(不知道有没有坑):

客户端发服务器:

在encode之后将数据填充到Uint8Array后发给服务器:

接收到服务器的data:

以上方法可以解决buffer解析出错的问题,但是还未应用到实际生产环境中,只是在为小游戏做准备,先暂时这样用着,如有问题再去解决。

还有就是微信小游戏对包体大小限制的很严格,如果用生成好的静态js文件,随着协议越多,js文件就会越大,这个有什么好办法解决呢?(难道是删掉里面的注释?手动滑稽)希望有大神有办法可以赐教!! 

if (!FileUpload1.Exists(savePath))

{

Response.Write("对不起!文件不存在!!")

return

}

这里的FileUpload1,是不是应该写成File.Exists....,FileUpload1看上去像是控件名称,而对服务器上的文件检查应用的File类。请核实。而FileUpload控件只是用来上传文件的,并不可能对已经存在于服务器上的文件进行访问。

下载代码,可以参考如下:

/// <summary>

/// 下载文件

/// </summary>

/// <param name="path">文件路径</param>

public void downLoad(string path)

{

try

{

string filePath = path

int temp = filePath.LastIndexOf("/") + 1

string fileName = filePath.Substring(temp, filePath.Length - temp)

//FileStream fileStream = new FileStream(Server.MapPath(filePath), FileMode.Open, FileAccess.Read, FileShare.Read)

FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)

long fileSize = fileStream.Length

Context.Response.ContentType = "application/octet-stream"

Context.Response.AddHeader("Content-Disposition", "attachmentfilename=\"" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + "\"")

Context.Response.AddHeader("Content-Length", fileSize.ToString())

byte[] fileBuffer = new byte[fileSize]

fileStream.Read(fileBuffer, 0, (int)fileSize)

fileStream.Close()

Context.Response.BinaryWrite(fileBuffer)

Context.Response.End()

}

catch

{

Response.Write("<script>alert('查无此资料或已被删除')</script>")

}

}

你可以参考对比下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7888187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存