【发布时间】:2021-12-31 11:39:49
【问题描述】:
在我寻求用于 c++ 的单个标头加密库时,我发现 this github 存储库使用 AES 和 CBC 模式将 std::string 加密为 unsigned char 的向量,在 repo 中提供的示例中
const unsigned char iv[16] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
};
已使用初始化向量,现在已准备好将加密数据发送到端点 /data 的 api,该端点接受 JSON 格式的数据
{"data":"encrypted-data"}
并解密以备后用
发送数据的服务器是用python写的,使用下面几行来解密数据
obj2 = AES.new('EncryptionKey128'.encode("utf8"), AES.MODE_CBC, 'This is an IV456'.encode("utf8"))
result = obj2.decrypt(phrase)
print (result)
如何将 iv 转换为在服务器端使用的字符串
如果尝试循环遍历中的项目
lst = [ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]
for item in lst:
item = item.replace('0x','')
bytes_object = bytes.fromhex(item)
ascii_string = bytes_object.decode("utf-8")
但这会创建一个大于 16 个字符的 iv
这背后的目标是使用 AES 加密字符串并将其发送到 python 服务器进行解密,为了这个示例,两个密钥都将在服务器和客户端中进行硬编码
【问题讨论】:
-
lst列表中的元素都是16进制值,那为什么要去掉0x,注释掉这一行
item = item.replace('0x','') -
item = item.replace('0x','')我非常怀疑,这会按预期工作。 -
您想将 unsigned char 数组 iv 转换为 UTF-8 字符串吗?你想用 Python 来做吗? chr 函数从数字中创建一个字符。
-
@Sebastian 是的,我想将 iv 数组转换为字符串
-
@AnandSowmithiran 我正在使用this example