В Java в качестве ключа используется декодированное в Base64 значение GIVEN_KEY
, в Python SHA256 ha sh из GIVEN_KEY
. Оба они не одинаковы.
Аналог в Python будет выглядеть примерно так:
import base64
...
secret = base64.b64decode(GIVEN_KEY.encode()) # by default UTF8 encoded
EDIT : в связанном коде (стр. 31) ключ: Base64url закодированный без заполнения:
QOahfcdo98NLjYJuhP4-VKigx51NkUETsKlIu9uXZFY
, который можно распознать по символу -
и длине, которая не делится на 4.
Это соответствует Base64url, декодированному в последовательность байтов
40e6a17dc768f7c34b8d826e84fe3e54a8a0c79d4d914113b0a948bbdb976456
, которая представляет 32-байтовый ключ (AES-256) и может быть протестирована, например, здесь .
В Python вы можете декодировать Base64url с помощью urlsafe_b64decode
. Однако ожидается заполненное значение в кодировке Base64url, поэтому сначала необходимо добавить заполнение, например, с помощью метода repad
из здесь .
import base64
# from https://stackoverflow.com/a/9024884/9014097
def repad(data):
return data + "=" * (-len(data)%4)
GIVEN_KEY = 'QOahfcdo98NLjYJuhP4-VKigx51NkUETsKlIu9uXZFY'
secret = base64.urlsafe_b64decode(repad(GIVEN_KEY).encode())
print(secret.hex()) # 40e6a17dc768f7c34b8d826e84fe3e54a8a0c79d4d914113b0a948bbdb976456