0

Blowfish エンコーディングで少しテストを行ったところ、何かに気づきました。エンコードされた文字列は、必ずしもソース文字列と同じ長さではありません。短いこともあります。

エンコードされた文字列をデコードしたい場合は、openssl 関数でデコードする長さが必要です。

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

ここでの問題はlength_to_decode、ソース文字列の長さがわからないと、デコードされた文字列の長さを length_to_decode として使用すると、これは短すぎる可能性があります。

より長い長さを使用すると、デコードされた文字列が正しくありません。では、blowfish エンコーディングでデコードする長さを知る必要がありますか?

インターネット上のすべてのコード例では、エンコードとデコードは常に 1 つの関数で行われ、デコードの例ではデコードにハードコードされた長さを使用します。しかし、実際には、エンコードされた文字列の長さはわかりません。

以下に例を示します。

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);
4

1 に答える 1

5

出力の長さは、入力の長さと同じです。出力データには NUL 文字が含まれる可能性があるためstrlen、データに対しては使用しないでください。

于 2011-08-16T13:40:39.713 に答える