前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >隐藏的换行符导致Base64加密解密失败

隐藏的换行符导致Base64加密解密失败

作者头像
凡梦星尘
发布2024-11-20 17:32:32
发布2024-11-20 17:32:32
1300
举报
文章被收录于专栏:Hugo博客Hugo博客

平日里偶尔会在调用API服务时,需要对用户与密码认证信息进行Base64加密处理,一般都用网上的在线工具进行直接操作获取。但是在客户现场环境中并没有互联网访问权限,便只能是寻求其他方法来实现Base64加密操作。起初是使用Python中的base64模块进行加密,只是操作起来较麻烦些,因为不同客户环境不一样而且也不能拷贝外部文件进去,只能是在Python交互模式下手工敲些代码。可是长久以往并不是办法,后来便发现了Linux系统其实大部都自带Base64的模块,于是便开始探索如何在Linux系统中使用Base64模块进行加解密的操作方式。

不过在尝试使用管道命令echo输出后调用base64命令进行加密,比如类似这样的操作命令:echo "ADMIN:123456" | base64,但当用加密认证信息访问API服务时,提示用户认证失败。通过对比之前使用Python的加密方式,发现两种方式加密后的字符串确实是不一样。参考结果如下:

1 2 3 4 5 6 7 8 9 10

root@debian12:/# echo "ADMIN:123456" | base64 QURNSU46MTIzNDU2Cg== root@debian12:/# python Python 3.11.2 (main, Aug 26 2024, 07:20:54) [GCC 12.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import base64 >>> encry_pswd="ADMIN:123456" >>> encode_pswd=base64.b64encode(encry_pswd.encode('utf-8')) >>> print(encode_pswd.decode('utf-8')) QURNSU46MTIzNDU2

可以看出来这里的两种方式加密的字符串看起来是很相似,但是仔细对比会发现末尾并不一样。一番探索后找到问题的“元凶”竟是因为在使用echo命令输出时,在字符串末尾会自动添加一个换行符,从而改变了加密内容,便导致加密后的字符串不一致。修复的方式就是在echo 命令后面添加一个-n参数,禁止输出时添加换行符。参考如下:

1 2

root@debian12:/# echo -n "ADMIN:123456" | base64 QURNSU46MTIzNDU2

只是每次进行加密操作都要记得输入这个参数,着实还是有点麻烦,于是便想到了使用printf命令来实现,参考如下:

1 2

root@debian12:/# printf "ADMIN:123456" | base64 QURNSU46MTIzNDU2

问题到此总算是完美解决,也推荐使用printf命令来实现Base64加密操作,不仅不再用担心忘记添加-n参数,而且printf命令还有更多丰富的功能可以引用。

注:在此只是简单的加密用户认证信息,并不涉及到大量的信息输出,所以完全不用担心 printf 命令的效率问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档