参考bug描述
- 发布:2024-07-31 17:18
- 更新:2024-08-01 15:16
- 阅读:131
产品分类: uniapp/小程序/微信
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 19045.4651
HBuilderX类型: 正式
HBuilderX版本号: 4.24
第三方开发者工具版本号: 1.06.2405020
基础库版本号: 2.21.0
项目创建方式: HBuilderX
操作步骤:
预期结果:
dev和build模式均应得到字符串
dev和build模式均应得到字符串
实际结果:
dev模式得到string,build模式得到object
dev模式得到string,build模式得到object
bug描述:
摘要:使用云对象+jsencrypt解密一段“被加密的json字符串”时,运行(dev)模式获取的结果为字符串,发行(build)模式获取的结果为object对象。
详细描述:我为了加密一些敏感json信息,在前后端使用jsencrypt进行加密,解密过程为前端使用云对象调用后台的decrypt方法。
云对象部分代码大致如下:
// 云对象名为crypto
'use strict';
const {
JSEncrypt
} = require('jsencrypt') // 我把jsencrypt上传到公共模块了
const crypt = new JSEncrypt()
const PRIVATE_KEY = "我的私钥"
crypt.setPrivateKey(
PRIVATE_KEY
)
module.exports = {
decrypt: function(p) {
return crypt.decrypt(p)
}
}
对应的前端部分代码大致如下:
const crypto = uniCloud.importObject('crypto')
...
test: async function(encrypted_str) {
const decrypted_str = await crypto.decrypt(encrypted_str)
console.log(typeof decrypted_str, decrypted_str)
}
我给这个test函数传入的字符串为通过jsencrypt加密后的JSON.stringify字符串,加密前的字符串举例为'{"a": 123}'
当我在运行(debug)模式时,console的输出为"string {"a":123}"。但当我运行在发行(build)模式时,console的输出为"object {a: 123}",即这个JSON字符串已经帮我解析为了一个object。导致我后续的JSON.parse报错。我目前是通过写
const obj = "string" === typeof decrypted_str ? JSON.parse(decrypted_str) : decrypted_str
暂时绕过了这个问题,但是这个很明显是代码混淆过程中改变了原始语义……
l***@qq.com (作者)
支付宝云
2024-08-01 17:53
DCloud_uniCloud_CRL
回复 l***@qq.com: 好的,我确认下。
2024-08-01 19:18
DCloud_uniCloud_CRL
确认有问题,我反馈给支付宝。
2024-08-01 19:54