起因:
本来想用k8s的secret来存储数据库的用户和密码。需要使用base64编码,就随手使用了linux的命令行终端生成了echo "xxx" | base64
,结果连接数据库始终连不上。想起来是运维给我默认的数据库名称加了个db_开头。然后改了数据库名称连上了。连正式环境的数据库,这时候密码是不一样的,发现也连不上开始。以为运维没给我开权限开好,但是使用mysql客户端能连上,说明不是运维的锅,然后还以为是pod里面的环境变量没有获取到,进入pod安装上vim,改了下代码,打印出来是有值的。就这样重复了好几遍始终不知道原因。又打印了下用户名和密码,发现用户名和密码之间有换行。
最后使用网页上的base64编码,才发现和终端编出来的不一样多个换行。
原因:
- 使用echo输出字符串时,如果没有-n参数会自动添加换行符
所以正确使用为echo -n "xxx" | base64
- 编码字符长度不是3倍数事,用0代替,对应的输出字符为 =,所以实际 Base64 有65种不同的字符。因此 Base64 字符串只可能末尾出现一个或者两个 = ,中间是不可能出现 = 的。