使用 python 中的给定密钥生成 AES 256 GCM 机密
Generating AES 256 GCM secret using a given key in python
我正在尝试在 python 中实施 AES 加密。
我指的是 java 代码示例以完成此操作。
在 Java 中,256 位秘密(使用给定的密钥)是使用
生成的
Key secretKey = new SecretKeySpec(Base64.decodeBase64(GIVEN_KEY), "AES");
我正在尝试使用以下代码段在 python 中执行相同的操作
secret = hashlib.sha256(GIVEN_KEY.encode()).digest()
但是使用 python 实现编码的字符串无法解密。
以上片段是否相似,或者我是否遗漏了什么?
在Java中,GIVEN_KEY
的Base64解码值用作键,在Python中,GIVEN_KEY
的SHA256散列。两者不一样。
Python 中的对应项类似于:
import base64
...
secret = base64.b64decode(GIVEN_KEY.encode()) # by default UTF8 encoded
编辑:
在 linked code (p. 31) the key is Base64url 编码的 中没有 填充:
QOahfcdo98NLjYJuhP4-VKigx51NkUETsKlIu9uXZFY
可以识别字符-
和不能被4整除的长度
这对应Base64url解码后的字节序列
40e6a17dc768f7c34b8d826e84fe3e54a8a0c79d4d914113b0a948bbdb976456
代表一个 32 字节的密钥 (AES-256) 并且可以被测试,例如here.
在 Python 中你可以使用 urlsafe_b64decode
. However, a padded Base64url encoded value is expected, so that the padding has to be added first, e.g. with the repad
method from here.
进行 Base64url 解码
import base64
# from
def repad(data):
return data + "=" * (-len(data)%4)
GIVEN_KEY = 'QOahfcdo98NLjYJuhP4-VKigx51NkUETsKlIu9uXZFY'
secret = base64.urlsafe_b64decode(repad(GIVEN_KEY).encode())
print(secret.hex()) # 40e6a17dc768f7c34b8d826e84fe3e54a8a0c79d4d914113b0a948bbdb976456
我正在尝试在 python 中实施 AES 加密。
我指的是 java 代码示例以完成此操作。
在 Java 中,256 位秘密(使用给定的密钥)是使用
Key secretKey = new SecretKeySpec(Base64.decodeBase64(GIVEN_KEY), "AES");
我正在尝试使用以下代码段在 python 中执行相同的操作
secret = hashlib.sha256(GIVEN_KEY.encode()).digest()
但是使用 python 实现编码的字符串无法解密。 以上片段是否相似,或者我是否遗漏了什么?
在Java中,GIVEN_KEY
的Base64解码值用作键,在Python中,GIVEN_KEY
的SHA256散列。两者不一样。
Python 中的对应项类似于:
import base64
...
secret = base64.b64decode(GIVEN_KEY.encode()) # by default UTF8 encoded
编辑: 在 linked code (p. 31) the key is Base64url 编码的 中没有 填充:
QOahfcdo98NLjYJuhP4-VKigx51NkUETsKlIu9uXZFY
可以识别字符-
和不能被4整除的长度
这对应Base64url解码后的字节序列
40e6a17dc768f7c34b8d826e84fe3e54a8a0c79d4d914113b0a948bbdb976456
代表一个 32 字节的密钥 (AES-256) 并且可以被测试,例如here.
在 Python 中你可以使用 urlsafe_b64decode
. However, a padded Base64url encoded value is expected, so that the padding has to be added first, e.g. with the repad
method from here.
import base64
# from
def repad(data):
return data + "=" * (-len(data)%4)
GIVEN_KEY = 'QOahfcdo98NLjYJuhP4-VKigx51NkUETsKlIu9uXZFY'
secret = base64.urlsafe_b64decode(repad(GIVEN_KEY).encode())
print(secret.hex()) # 40e6a17dc768f7c34b8d826e84fe3e54a8a0c79d4d914113b0a948bbdb976456