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