怎样提升go中的RSA解密速度2~3倍

背景

我们的业务中大量的使用了RSA加密后的数据包,每个数据包大概17-30K不等,因为从php迁移到go,RSA解密业务是无法避免的,之前一直以为迁移后go的解密速度即使没有php快,但也应该相同因此使用了go中x509.ParsePKCS1PrivateKey和rsa.DecryptPKCS1v15实现解密业务。

测试过程

我们使用go版本是1.15.13,实现解密业务后,我们对程序进行解析压测时发现go实现解密比php要慢1倍,这个结果让我们很惊讶,经过review代码和重新验证设置的环境变量后发现确实要慢1倍。

排查

这样的结果是没办法接受的,因此尝试从1.15升级到1.19看看有没有什么变化,以下为开发mac测试结果,m1 16g
go1.15.13 解密花费时间:38-41ms
Go1.19.4 解密花费时间:20ms
从结果上看,1.19版本能提高2倍左右,于是果断升级到1.19后打包上线

上线效果

1.19的tag上线后,解密并没有任何变化,这让人匪夷所思从本地的测试的结果上看确实提升了2倍,于是把tag扔到了cpu为amd的测试机上,跑出来的效果是没升级版本前的效果,这时候有些慌了。

再次排查

于是重新开始梳理,仔细思考了下php为什么会比go快,突然想到php其实直接调用的是c,而在go中我们并没有直接使用cgo,也许就是这个原因吧。重新开始翻查rsa的包,发现1.19比1.15多了boring.go和notboring.go的文件,于是好奇进去看了看,有这么一句话引起了注意,翻译过来就是,如果使用boring必须设置CGO_ENABLED = 1,boringCrypto = 1
在这里插入图片描述
于是抱着试一试的心态去进行了环境变量设置,设置方法如下

CGO_ENABLED=1 GOEXPERIMENT=boringcrypto

重新打包后测试,性能提升符合预期,完美解决。

鸣谢

这里要感谢组内的同事,特别是一个97的同事。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值