资讯专栏INFORMATION COLUMN

Base62x比Base64的编码速度更快吗?

tainzhi / 3292人阅读

摘要:比如其中一个的应用场景,在中取代的改进使用的方案是从代码层分析耗时差值原因,尽管两者都使用了位操作进行计算,但在单位编码长度上多了数值判断,由此导致其速度下降。

现在几乎所有企事业单位、政府机构、军工系统等的IT生产系统都会用到Base64编码,从RSA安全密钥到管理信息系统登录入口回跳,目前越来越多的IT系统研发者开始使用 Base62x 替换 Base64.

-Base62x 提供了一种无符号输出的Base64的编码方案,在许多应用场合其纯字母和数字的输出形式,可以有效的规避因为符号带来的各种负面影响,并能够有效削减或兼容各种Base64的变种形式。

借着 Base62x 在 -GitHub 上获得几个赞之后,我们探讨另外一个问题,Base62x 的编码在输出文本形式上略胜一筹,是值得推荐的替代方案,但其编码速度和效率如何?

为此我们设计一个评测任务,分别使用Base62x 和 Base64进行20万次编码操作,其中Base62x 使用 PHP的ext module方式实现的 base62x_encode , Base64 也是 PHP内置的 base64_encode , 两种均是使用C语言实现,并通过扩展方式集成在 PHP中,相对而言,可比性较好. 运行主机是在 Windows下虚拟主机运行 OpenSuSE 42,Nginx 1.12, PHP 7.0.
通过脚本Command Line调用方式进行20万次编码任务,对比测试数据:

base62x 200000 timestart:1513077337.6748 timecost:0.30399990081787
base64 200000 timestart:1513077337.9788 timecost:0.16817998886108

base62x 200000 timestart:1513077401.2177 timecost:0.29567098617554
base64 200000 timestart:1513077401.5134 timecost:0.17081189155579

base62x 200000 timestart:1513077424.234 timecost:0.30112099647522
base64 200000 timestart:1513077424.5351 timecost:0.1718909740448

base62x 200000 timestart:1513077447.9861 timecost:0.29450607299805
base64 200000 timestart:1513077448.2806 timecost:0.16546702384949

base62x 200000 timestart:1513077470.7367 timecost:0.45493698120117
base64 200000 timestart:1513077471.1917 timecost:0.24029588699341

运行5次之后,Base62x 和 Base64 其均值分别为,0.330047 和 0.183329 . 由此可见,Base62x 比 Base64 在编码速度上稍慢,20万次操作耗时比值为 1:0.555 , 尽管每次操作其耗时差(7.33589E-07)可以忽略不计,但考察比值,Base62x 慢了大约 44.5%,大致是 Base64 完成两个编码操作, 目前版本的 Base62x 完成一个多一点的编码操作。

如果加上在应用层的各种判断,使用 Base62x 替代 Base64 可能是有优势的,比如判断是否包括+,进而转化为空格,是否包括等号等,因为任何一步额外的判断或替换操作,其耗时将可能远超过 Base62x 与 Base64 操作耗时的差值。

比如其中一个 URLEncode 的应用场景,在 -github/wadelau/gMIS/comm/ido.js 中( -R/J2SI ):

var actx = unescape(tObj.action);
actx = actx.replace(‘+‘, ‘ ‘);     

取代的改进使用Base62x的方案是:

var actx = Base62x.decode(tObj.action);
 /* no more action needed */

从代码层分析耗时差值原因,尽管两者都使用了位操作进行计算,但 Base62x 在单位编码长度上多了数值判断,由此导致其速度下降。Base62x 还是新事物,其代码应该还有可以再改进优化的空间。

如果进一步改进优化,Base62x 有可能与 Base64 相同的编码速度吗?

有没有可能存在另外一种不需要数值判断,也能够满足与 Base62x 一样无符号输出的64进制编码方案?

小结,单就编码速度而言, Base64 方案快,如果加上其他判断与替换操作, Base62x 方案胜出,未来可能会有鱼(无符号输出)和熊掌(速度)兼得的新编码方案出现。

-R/p2SQ

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30114.html

相关文章

  • -Base62x 新增 -Perl 版本技术实现 Base62x.pm

    摘要:同的其他版本相通,实现了跨编程语言运行时环境的数据安全交换。函数式编程的除了式的写法,还提供了函数式编程的调用方式,列如下。函数式编程适合单一次启动并运行的使用场景。 在此前的一篇Blog(-R/G2SW )中,-gMIS 吉密斯优化更新+分组项区段AddGroupBySeg/+复制AddByCopy等, 我们提到注册动作registerAct: 改进增加 Base62x.class....

    WelliJhon 评论0 收藏0
  • -Base62x 新增 -Perl 版本技术实现 Base62x.pm

    摘要:同的其他版本相通,实现了跨编程语言运行时环境的数据安全交换。函数式编程的除了式的写法,还提供了函数式编程的调用方式,列如下。函数式编程适合单一次启动并运行的使用场景。 在此前的一篇Blog(-R/G2SW )中,-gMIS 吉密斯优化更新+分组项区段AddGroupBySeg/+复制AddByCopy等, 我们提到注册动作registerAct: 改进增加 Base62x.class....

    oujie 评论0 收藏0
  • -Base62x 新增 -Perl 版本技术实现 Base62x.pm

    摘要:同的其他版本相通,实现了跨编程语言运行时环境的数据安全交换。函数式编程的除了式的写法,还提供了函数式编程的调用方式,列如下。函数式编程适合单一次启动并运行的使用场景。 在此前的一篇Blog(-R/G2SW )中,-gMIS 吉密斯优化更新+分组项区段AddGroupBySeg/+复制AddByCopy等, 我们提到注册动作registerAct: 改进增加 Base62x.class....

    weij 评论0 收藏0
  • 加密解密算法介绍

    摘要:加密解密算法介绍算法目前常见有加密算法,散列算法,编码算法,使用位关键字作为流加密算法加密技术通常分为两大类对称式和非对称式。对称性加密算法有用途对称加密算法用来对敏感数据等信息进行加密数据加密标准,速度较快,适用于加密大量数据的场合。 加密解密算法介绍 算法目前常见有: 加密算法,散列算法,Base64(编码算法),https(SSL使用40位关键字作为RC4流加密算法) 加密技术通...

    ThinkSNS 评论0 收藏0
  • Java Base64 编码解码方案总结

    摘要:是一种能将任意资料用种字元组合成字串的方法,而这个资料和字串资料彼此之间是可以互相转换的,十分方便。实际测试编码与解码速度的话,提供的,要比套件提供的还要快至少倍,比提供的还要快至少倍。 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外...

    sevi_stuo 评论0 收藏0

发表评论

0条评论

tainzhi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<