2009-10-01 33 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

相關問題