2011-03-07 64 views
0

我有一段使用Blowfish(openssl/blowfish.h)加密的測試代碼,然後解密一個字符串。但是當它再次出現時,它還沒有被正確解密。誰能告訴我爲什麼請?Blowfish C++沒有正確加密/解密..爲什麼..?

(在http://pastebin.com/AaWSF5pX從OP的原始拷貝)

#include <stdlib.h> 
#include <cstdio> 
#include <string.h> 
#include <iostream> 
using namespace std; 

int main(int argc, char **argv) 
{ 
    // blowfish key 
    const char *key = "h&6^5fVghasV_Fte"; 
    BF_KEY bfKey; 
    BF_set_key(&bfKey, strlen(key), (const unsigned char*)key); 

    // encrypt 
    const unsigned char *inStr = (const unsigned char *)"hello world\0"; 
    unsigned char *outStr = (unsigned char *)malloc(sizeof(unsigned char) * 100); 
    BF_ecb_encrypt(inStr, outStr, &bfKey, BF_ENCRYPT); 

    // decrypt 
    unsigned char buf[100]; 
    BF_ecb_encrypt((const unsigned char*)outStr, buf, &bfKey, BF_DECRYPT); 
    std::cout << "decrypted: " << buf << "\n"; 
    free(outStr); 

    return 0; 
} 

輸入: 「Hello World」 的

輸出: 「你好WO4 \ Z」

+1

請包括問題中的代碼,而不是把它放在外部網站 – Erik 2011-03-07 22:31:08

回答

6

河豚上運行64位塊:即8個字節的倍數。 BF_ecb_ *處理一個這樣的塊。這是你的字符串的前8個字符。其餘的被BF_ecb_ *忽略。如果您想加密更長的內容,如果您真的很樂意使用ECB模式,或者使用BF_ofb_ *之類的方法,請將BF_ecb_ *應用於一個接一個的循環中。

+0

但我似乎是在cbc得到一個段錯誤:http://pastebin.com/MAYsnShb – tommed 2011-03-07 23:09:55

+0

最有可能你需要填補輸出和輸入,所以它們是8個字節的倍數。 – 2011-03-07 23:14:18

0

BF_ecb_encrypt手冊頁:

它加密或解密的前64位中使用的關鍵鑰匙,把結果出來。

閱讀文檔。

+0

公平點,謝謝 – tommed 2013-11-26 12:03:42