【问题标题】:Array of unsigned char to string [closed]无符号字符数组到字符串[关闭]
【发布时间】: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

标签: c++ aes


【解决方案1】:

对于这些情况,通常的方法是将这些字节转换为 base64,然后再将结果字符串发送并粘贴到 JSON 请求中。在服务器端,您的 python 代码需要解码生成的 base64 以将其转换回字节。

【讨论】:

  • 是的,这是对加密数据完成的,但我想将 iv 转换为字符串以用于服务器端的解密部分
  • 要在程序代码那里插入?
猜你喜欢
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多