【问题标题】:Convert AES encrypted hex string back to string in C++将 AES 加密的十六进制字符串转换回 C++ 中的字符串
【发布时间】:2013-04-15 15:54:04
【问题描述】:

在 C++ 中,我有一个 AES 加密的 char*,在将其作为 URL 参数just as it is done in this question 发送之前,我将其转换为十六进制表示。现在,我想做相反的事情,即再次将此类十六进制转换回 char*。但是我在这里感到困惑-将 sprintf 与 %x 或 %s 一起使用会导致完全不同的值。我怎么能再次转换回来?谢谢...

【问题讨论】:

  • 你试过什么?您可以分配大小为 strlen(hex)/2 的缓冲区,然后遍历字符串,使用 sscanf 将数字对解析回 char 并将其存储在缓冲区中的正确位置。也许可以尝试一下,如果您无法使其正常工作,请向我们展示您的代码。
  • sprintf 的倒数是sscanf,而不是另一个sprintf。换句话说——你是在读东西,而不是在写东西。在sscanf 中,格式字符串表示“从这个字符串开始,使用这种格式,找到这个值”。你能从那里弄清楚吗?

标签: c++ c character aes printf


【解决方案1】:

你可以像这样使用sscanf()

#define LEN  16 /* 128/8 */

void aes_to_char(char *aes, char *res)
{
  int i;
  for (i = 0; i < LEN; i++) {
    sscanf(aes, "%2hhx", &res[i]);
    aes += 2;
  }
}

"%2hhx" 表示“一个 2 个字符的十六进制值,将存储在 char * 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2012-01-14
    • 2022-07-22
    • 1970-01-01
    • 2012-11-06
    • 2017-02-23
    • 2014-08-03
    相关资源
    最近更新 更多