C++ 将AES加密字符串转换为C++;

C++ 将AES加密字符串转换为C++;,c++,C++,我有一个使用AES加密编码的char*字符串。此字符串包含范围广泛的十六进制字符,而不仅仅是ASCII可查看的字符。我需要转换这个字符串,以便通过HTTP发送,HTTP不接受加密算法生成的所有字符 转换此字符串的最佳方法是什么?我使用了下面的函数,但是有很多空格(0xFF),它不能转换所有字符 char *strToHex(char *str){ char *buffer = new char[(dStrlen(str)*2)+1]; char *pbuffer = buffer;

我有一个使用AES加密编码的char*字符串。此字符串包含范围广泛的十六进制字符,而不仅仅是ASCII可查看的字符。我需要转换这个字符串,以便通过HTTP发送,HTTP不接受加密算法生成的所有字符

转换此字符串的最佳方法是什么?我使用了下面的函数,但是有很多空格(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;
}
char*strochex(char*str){
char*buffer=新字符[(dStrlen(str)*2)+1];
char*pbuffer=缓冲区;
int len=strlen(str);
对于(int i=0;i
谢谢,,
贾斯廷

< P>我不知道C++中是否有一个LIB,但最好的方法是将字节编码成Base64。如果没有标准的编码器(但我怀疑会有),那么编写自己的编码器就很简单了。

可以使用各种库进行转换,例如: ,但它确实使字符串比原始字符串大,因为它接受8位字符并将其转换为7位字符


然后需要对其进行解码才能使用。

有几个问题。首先,您的字符可能是有符号的,这就是为什么您会得到很多FF的原因-如果您的字符是0x99,那么它会在打印时得到扩展到0xFFFF99的符号。其次,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;
}
char*strochex(无符号char*str,int len){
char*buffer=新字符[len*2+1];
char*pbuffer=缓冲区;
对于(int i=0;i
+1-使用base64的一个非常简单的解决方案。为了将密钥存储在xml文件中,我以前必须这样做。对签名字符问题的理解很好,你在将密文视为C样式字符串的问题上击败了我。你为什么认为你不能通过HTTP发送二进制数据?只要使用正确的头和有效的HTTP请求,就应该没有问题。准确的“内容长度”标题或正确的分块编码是必要的。