隐藏的换行符导致Base64加密解密失败
平日里偶尔会在调用API服务时,需要对用户与密码认证信息进行Base64加密处理,一般都用网上的在线工具进行直接操作获取。但是在客户现场环境中并没有互联网访问权限,便只能是寻求其他方法来实现Base64加密操作。起初是使用Python中的base64模块进行加密,只是操作起来较麻烦些,因为不同客户环境不一样而且也不能拷贝外部文件进去,只能是在Python交互模式下手工敲些代码。可是长久以往并不是办法,后来便发现了Linux系统其实大部都自带Base64的模块,于是便开始探索如何在Linux系统中使用Base64模块进行加解密的操作方式。
不过在尝试使用管道命令echo
输出后调用base64
命令进行加密,比如类似这样的操作命令:echo "ADMIN:123456" | base64
,但当用加密认证信息访问API服务时,提示用户认证失败。通过对比之前使用Python的加密方式,发现两种方式加密后的字符串确实是不一样。参考结果如下:
|
|
可以看出来这里的两种方式加密的字符串看起来是很相似,但是仔细对比会发现末尾并不一样。一番探索后找到问题的“元凶”竟是因为在使用echo
命令输出时,在字符串末尾会自动添加一个换行符,从而改变了加密内容,便导致加密后的字符串不一致。修复的方式就是在echo
命令后面添加一个-n
参数,禁止输出时添加换行符。参考如下:
|
|
只是每次进行加密操作都要记得输入这个参数,着实还是有点麻烦,于是便想到了使用printf
命令来实现,参考如下:
|
|
问题到此总算是完美解决,也推荐使用printf
命令来实现Base64加密操作,不仅不再用担心忘记添加-n
参数,而且printf
命令还有更多丰富的功能可以引用。
注:在此只是简单的加密用户认证信息,并不涉及到大量的信息输出,所以完全不用担心
printf
命令的效率问题。