Blowfish C ++ неправильно шифрует / дешифрует .. почему ..? - PullRequest
0 голосов
/ 08 марта 2011

У меня есть этот тестовый код, который использует Blowfish (openssl / blowfish.h) для шифрования, а затем расшифровывает строку.Но когда это выходит снова, это не было расшифровано должным образом.Может кто-нибудь сказать мне, почему, пожалуйста?

(скопировано с оригинала ОП на http://pastebin.com/AaWSF5pX)

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

Вход: "Hello World"

Выход: "hello wo4� \"Z "

Ответы [ 2 ]

6 голосов
/ 08 марта 2011

Blowfish работает на 64-битных блоках, то есть кратно 8 байтам.BF_ecb_ * обрабатывает один такой блок.Это первые 8 символов вашей строки.Остальное игнорируется BF_ecb_ *.Если вы хотите зашифровать что-то дольше, примените BF_ecb_ * к одному блоку за другим в цикле, если вы действительно счастливы использовать режим ECB, или используйте что-то вроде BF_ofb _ *.

0 голосов
/ 08 марта 2011

С BF_ecb_encrypt справочная страница:

Он шифрует или дешифрует первые 64 бита при использовании ключа ключа, выводя результат на выходе.

Прочитайте документы.

...