簡體   English   中英

在C ++中將AES加密字符串轉換為十六進制

[英]Convert AES encrypted string to hex in C++

我有一個char *字符串,我使用AES加密編碼。 此字符串包含各種十六進制字符,而不僅僅是ASCII可查看的字符。 我需要轉換這個字符串,以便我可以通過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;
}

謝謝你,賈斯汀

我不知道c ++中是否有lib,但最好的方法是將字節編碼為base64。 編寫自己的編碼器非常簡單,如果周圍沒有標准編碼器(但我懷疑會有)。

一些問題。 首先,你的角色可能是簽名的,這就是你獲得大量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;
}

您可以使用各種庫進行轉換,例如: http//www.nuclex.org/downloads/developers/snippets/base64-encoder-and-decoder-in-cxx ,但它確實使字符串更大比原來的,因為它需要一個8位字符並將其轉換為7位字符。

然后,您需要對其進行解碼才能使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM