0

Blowfish(openssl / blowfish.h)を使用して文字列を暗号化してから復号化する、このテストコードがあります。しかし、それが再び出てきたとき、それは適切に復号化されていません。誰か教えてもらえますか?

( 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;
}

入力:「HelloWorld」

出力:「hellowo4�\Z��」

4

2 に答える 2

6

Blowfish は 64 ビット ブロック、つまり 8 バイトの倍数で動作します。BF_ecb_* は、そのようなブロックを 1 つ処理します。これは、文字列の最初の 8 文字です。残りは BF_ecb_* によって無視されます。より長い暗号化を行いたい場合、ECB モードを使用することに本当に満足している場合は、BF_ecb_* をループ内の次のブロックに適用するか、BF_ofb_* のようなものを使用します。

于 2011-03-07T22:40:08.027 に答える
0

BF_ecb_encryptマニュアルページから:

キー key を使用して in の最初の 64 ビットを暗号化または復号化し、結果を out にします。

ドキュメントを読んでください。

于 2011-03-07T22:42:00.040 に答える