2011-08-16 58 views
0

我用Blowfish編碼做了一點測試,發現了一些東西。編碼的字符串並不總是和源字符串一樣長。它有時更短。Blowfish加密後字符串長度不正確

如果我想要一個編碼字符串解碼,我需要的長度,在OpenSSL功能解碼:

BF_cfb64_encrypt(encoded_input,decoded_output,length_to_decode,&key,iv,&num,BF_DECRYPT);  

這裏的問題是,我沒有length_to_decode,如果我不知道長的源字符串。如果我使用解碼字符串的長度作爲length_to_decode,那麼這可能太短。

如果我使用更大的長度,那麼解碼的字符串是不正確的。那麼我需要知道用blowfish編碼解碼的長度嗎?

在互聯網上的所有示例代碼中編碼和解碼總是發生在一個功能中,並且解碼示例使用硬編碼長度來解碼。但在現實生活中,我不知道編碼字符串的長度,然後呢?

這裏是一個例子:

source string: sdcfgssssssss 
source length: 13 
encryption key: s 
encrypted output: :‹(
encrypted length: 4 

我初始化我的關鍵是這樣的:

BF_KEY key; 
const char * keyStr = "s"; 
BF_set_key(&key, strlen(keyStr), (const unsigned char *)keyStr); 
+1

您的換檔鍵壞了。 – sbi

+0

好的。我怎樣才能解決這個問題?請參閱上文有關我如何初始化密鑰 –

+2

嘗試修復損壞的密鑰沒有意義。只需購買一個新的鍵盤。 – sbi

回答

5

輸出的長度是相同的輸入的長度。請注意,輸出數據可能包含NUL字符,因此您不應在數據上使用strlen

+0

你是對的。我也做了base64編碼和解碼。 我的第二個錯誤是,我試圖解密與base64編碼的長度的字符串。但我當然需要使用base64解碼字符串的長度。 –