l***@qq.com
l***@qq.com
  • 发布:2024-07-31 17:18
  • 更新:2024-08-01 15:16
  • 阅读:131

【报Bug】微信小程序发行模式自动把json字符串转换为了object对象

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 19045.4651

HBuilderX类型: 正式

HBuilderX版本号: 4.24

第三方开发者工具版本号: 1.06.2405020

基础库版本号: 2.21.0

项目创建方式: HBuilderX

操作步骤:

参考bug描述

预期结果:

dev和build模式均应得到字符串

实际结果:

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

暂时绕过了这个问题,但是这个很明显是代码混淆过程中改变了原始语义……

2024-07-31 17:18 负责人:无 分享
已邀请:
DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

哪个云厂商呢?

要回复问题请先登录注册