我有一个使用 .json 文件中的多个凭据连接到 BigQuery 的应用程序。由于此应用程序最终将驻留在 Pivotal Cloud Foundry 上,并且需要将其设置为用户提供的环境变量,因此我使用 base64 加密将 .json 文件的内容编码为 base64 密钥。
我的想法是,我可以使用键作为环境变量的值,这样我就可以将 .json 文件中的所有 BigQuery API 连接信息拉到一个环境变量中 - 使用 base64 键,而不是使用许多 key=value 对变量来实现这一点。
注意:base64 密钥有 3,165 个字符 - 包括换行符。
作为参考,base64 密钥的简短片段如下:
nROdXlnWnVmb1k0UnVqTFJlcjgrckZJRlpZdVxuYUFsMklsWk9MUjd3cmRzL0RDZytYdGJGYUp4MzlRaWZHaEp6b2hyblNvbUpyY3ExL2d4aVFYYlplUUtCZ0hja1xua0hqL1M0Wkk0d0dWTzJreEN4QzduYnB1STVQRTRWczRHMjE0RkpldnhPR1hDQ3phOFB5bGJPbm5KUFdZZUJoT1xuV3IwMzduazd5eXpja0p6cE\
p0R0hlNkZLNFJNcHFIRHBmU0pMOE80T2YwWi9UYUZ3ZTM4bE9XbWc1Q2NLUC9XUVxuUjhYdlgzS25UZXRQUWxVeXJwK1BNVHNNdG4yVnBad1hMZDNJTExKYkFvR0JBS1FaODdVbEE1S0kwV3JqVnRic1xuaXJ6UkdDaGhVWE90SXVDT09zWlQyOXNpeFVoQmZka1JzTFpCcnB6VkVWektXeGhBY05lRERRbTJkVzBta09\
1elxuTkNVUlBpbGZYT0pLRkdNQ2lOdkIyZW5OMDVBK2ExdVdOWFFkclQzRG10OG5MS3FFYnp6VTNheXIweWVsc0tKeVxuNE9BVExMK3M5M29oRFV6WEhRZlVtbnNMXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iLAogICJjbGllbnRfZW1haWwiOiAidG1wLWFkLWxvY2tvdXRAaW8xLWRhdGFsYWtlLXZpZXdz\
我知道可以在 macOS 上将其设置为系统变量(我已经看到它并且应用程序建立连接并正常工作)但我无法在 Windows 10 上执行此操作。
我知道 Windows 上系统变量的最大长度限制,但还没有找到解决方案,能够使用“GOOGLE_JSON_B64”作为环境变量名称,然后将 3,165 键作为环境变量值来设置它。
有人有解决方法吗?
任何见解都将不胜感激。
答案1
微软的文档说,Windows 上的环境变量仅限于 32,767 个字符(关联)它没有说明如何创建一个非常长的变量。
这里的问题是 Windows 提供的工具都有其局限性:
这 设置命令 和 setx 命令 将值截断为 1023 个字符。
可以在注册表中直接设置环境变量
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,但是使用 regedit 进行此操作将会失败,因为通过键盘输入的字符串限制为 2047 个字符。
据我所知,剩下的唯一选择是编写一个直接更新注册表的小程序。要使用的 Windows API 函数是 设置环境变量,其文档指出:
用户定义的环境变量的最大大小为 32,767 个字符。
希望这至少是正确的。您可能会遇到编译器接受的最大行长度,但在程序中您可以分步构建如此长的字符串。