2009-10-01 36 views
2

我有一个使用AES加密编码的char *字符串。该字符串包含大量的十六进制字符,而不仅仅是ASCII可查看的字符。我需要转换此字符串,以便我可以通过HTTP发送它,它不接受加密算法生成的所有字符。将AES加密字符串转换为C++中的十六进制

转换此字符串的最佳方法是什么?我使用了下面的函数,但有很多空格(0xFF),它不能转换所有的字符。

char *strToHex(char *str){ 
    char *buffer = new char[(dStrlen(str)*2)+1]; 
    char *pbuffer = buffer; 
    int len = strlen(str); 
    for(int i = 0; i < len ; ++i){ 
     sprintf(pbuffer, "%02X", str[i]); 
     pbuffer += 2; 
    } 
    return buffer; 
} 

谢谢 贾斯汀

+3

是什么让你认为你不能通过HTTP发送二进制数据?只要您使用正确的标头和有效的HTTP请求,就不会有问题。准确的“内容长度”标题或适当的分块编码是必要的。 –

回答

5

有几个问题。首先,您的角色可能已被签名,这就是您获得大量FF的原因 - 如果您的角色为0x99,则在打印时将其符号扩展为0xFFFFFF99。其次,strlen(或者dStrlen - 那是什么?)不好,因为你的输入字符串可能有空值。你需要明确地传递字符串长度。

char *strToHex(unsigned char *str, int len){ 
    char *buffer = new char[len*2+1]; 
    char *pbuffer = buffer; 
    for(int i = 0; i < len ; ++i){ 
    sprintf(pbuffer, "%02X", str[i]); 
    pbuffer += 2; 
    } 
    return buffer; 
} 
+0

很好的捕获签名字符问题,你击败了我关于将密文视为C风格字符串的问题。 –

10

我不知道是否有C++中的lib中,但最好的办法是到字节编码为BASE64。编写自己的编码器非常简单,如果周围没有标准编码器(但我怀疑会有)。

+0

+1 - 使用base64的一个非常简单的解决方案。我必须这样做才能将密钥存储在xml文件中。 –

+1

http://libb64.sourceforge.net/ – Stobor

相关问题