使用Python将base64编码的Google服务帐户密钥转换为JSON文件

时间:2018-11-24 11:59:28

标签: python base64 google-compute-engine

您好,我正在尝试将Google服务帐户JSON密钥(包含在文件foo.json-更多上下文here中名为privateKeyData的base64编码字段中)转换为实际的JSON文件(我需要该格式为ansible只接受)

使用此Google python API method

获取foo.json文件。

this线程也描述了我正在尝试做的事情(尽管我使用的是python),但该线程对我不起作用(在OSx和Linux上试用过)。

#!/usr/bin/env python3

import json
import base64

with open('/tmp/foo.json', 'r') as f:
    ymldict = json.load(f)

b64encodedCreds = ymldict['privateKeyData']

b64decodedBytes = base64.b64decode(b64encodedCreds,validate=True)

outputStr = b64decodedBytes
print(outputStr)

#issue
outputStr = b64decodedBytes.decode('UTF-8')
print(outputStr)

收益

./test.py 
b'0\x82\t\xab\x02\x01\x030\x82\td\x06\t*\x86H\x86\xf7\r\x01\x07\x01\xa0\x82\tU\x04\x82\tQ0\x82\tM0\x82\x05q\x06\t*\x86H\x86\xf7\r\x01\x07\x01\xa0\x82\x05b\x04\x82\x05^0\x82\x05Z0\x82\x05V\x06\x0b*\x86H\x86\xf7\r\x01\x0c\n\x01\x02\xa0\x82\x#TRUNCATING HERE
    Traceback (most recent call last):
      File "./test.py", line 17, in <module>
        outputStr = b64decodedBytes.decode('UTF-8')
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 1: invalid start byte

我想我已经没有想法了,现在花了一天多的时间:(

我在做什么错?

1 个答案:

答案 0 :(得分:0)

您的base64解码逻辑对我来说很好。您面临的问题可能是由于字符编码不匹配。调用create(您的foo.json文件)后收到的响应正文可能未使用UTF-8编码。检出响应头的Content-Type字段。它应该看起来像这样:

Content-Type: text/javascript; charset=Shift_JIS

尝试使用内容类型中使用的编码对base64解码的字符串进行解码

b64decodedBytes.decode('Shift_JIS')