2011-08-16 37 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解码字符串的长度。 –