yuanjin
yuanjin
  • 发布:2020-02-24 10:40
  • 更新:2024-04-22 14:34
  • 阅读:5016

uniapp不兼容加密算法,打包到 app-plus 就无法运行

分类:uni-app

在 HBuilderX 2.5.1 ,uniapp 里使用加密算法,打包到 app 就无法使用 nodejs自家的 crypto,第三方 bip39, bitcore-mnemonic, 等等一大堆库。追踪下来问题在 crypto.randomBytes,

要么 crypto.randomBytes(16) 就报错

Error: Secure random number generation is not supported by this browser.  
09:32:17.966 Use Chrome, Firefox or Internet Explorer 11 __ERROR 

要么 window.crypto.getRandomBytes(new Uint8Array(16)) 也报错

window.crypto.getRandomValues(new Uint8Array(16)) 在web能用,但没必要。在 app 报错   
[ERROR] : ReferenceError: Can't find variable: window __ERROR 

无计可施。谁能解决吗?

2020-02-24 10:40 负责人:无 分享
已邀请:
aboutlikefish

aboutlikefish

还是没有修复,麻烦给出个解决方案
crypto使用范围还是很广的

DCloud_UNI_FXY

DCloud_UNI_FXY

发一个最简单的demo工程吧

  • yuanjin (作者)

    多谢追踪。我发了个zip附件,但是看不到我自己的回复贴,是在审核压缩包吗...

    2020-02-24 19:41

yuanjin

yuanjin (作者)

再发个试试...
环境 HBuilder 2.5.120200103 MacOS 新建 uni-app 项目,仅仅修改了 pages/index/index.vue
网上找到的最接近的线索是 https://github.com/steemit/steem-js/issues/398

DCloud_UNI_GSQ

DCloud_UNI_GSQ

HBuilderX 2.6.3 alpha 已经修复

  • yuanjin (作者)

    太好了,感谢!

    经简单测试,

    Mac 10.15 Catalina + HBuilder 2.6.4 alpha 打的iOS安装包 已经能够正常加解密。

    安卓环境似乎还有些问题,我继续测试后告知结果。

    2020-03-13 13:58

yuanjin

yuanjin (作者)

经测试,在iOS 平台上很完美了。不过在安卓app和微信小程序里,还发现几个问题,请见附件。

问题集中在 nodejs自带的 crypto 库,以及 bip39 库:

1). bip39.mnemonicToSeedSync: 助记词转化为种子。在所有其他环境下都ok,但是安卓app失败。
2). bip39.validateMnemonic: 验证助记词。在安卓上、安卓版微信自带浏览器里失败。
3). 微信小程序仍然对 crypto.randomBytes报错,导致多个测试失败。

有的应当还是打包问题,有的应该是安卓环境或者这些库本身的问题了。2.6.4 alpha 对我的需求已经基本满足(我主要针对浏览器和iOS平台),以上测试结果供您参考。

  • 半晴雨滴

    这个包,运行到浏览器报错:文件查找失败:'bs58' at node_modules\coinstring\lib\coinstring.js:1

    少了个依赖包:npm i --save bs58

    2020-03-16 11:27

  • yuanjin (作者)

    回复 半晴雨滴: 我这个包里没有用到 bs58 ,没有用来生成地址。因为从公钥到地址只用到哈希算法,测试过没有问题,就没放进来。这个demo工程里只保留了还有兼容性问题的。

    2020-03-16 12:42

暴躁的货车

暴躁的货车

兄台, 我这边在开发钱包APP的时候也遇到你类似的情况,项目引用了bitcore-wallet-client": "^8.20.4这个包,我看了里面也需要用到bitcore-mnemonic,bitcore-lib等,现在真机调试就白屏,我也无计可施了,大佬您是怎么解决的呢?问题详情:https://ask.dcloud.net.cn/question/99613

  • yuanjin (作者)

    刚登录看到消息,不好意思。这没什么好办法,现在最新版 uniapp 也还有不少加密相关函数是不支持的。只好一层层跟踪下去,看到底哪个函数调用出错,然后找其他包的类似函数去替换,看侥幸有没有能用的。现在主要是 android app 还无法支持 mnemonic 相关功能,其他基本都有办法绕过了。

    2020-07-04 19:51

  • yuanjin (作者)

    回复 2***@qq.com: 我也没有解决bip39问题

    2020-09-08 08:58

雨时节

雨时节

我也被这个问题搞死了。。。怎么办。。。

w***@xinboxinmo.com

w***@xinboxinmo.com

什么时候能修复

aboutlikefish

aboutlikefish

把函数名字改了就行

1***@qq.com

1***@qq.com

微信小程序 crypto.randomBytes 这个解决了吗, 还是报错

c***@126.com

c***@126.com

就离谱,这么基础的一个功能居然用不了

1***@qq.com

1***@qq.com

这bug修复了么?

怎么我用最新版的hbuilderx 还是报这个错误呢?

我刚发的帖子 https://ask.dcloud.net.cn/question/172128 ,里面就有测试代码

2***@qq.com

2***@qq.com - 大侠

兄弟 这个问题最后解决了吗?安卓还是不支持crypto.getRandomValues

  • yuanjin (作者)

    还是没有彻底解决,安卓上测试确实还不支持 crypto

    2024-06-07 15:04

要回复问题请先登录注册