Шифрование и дешифрование Blowfish в C

Итак, вот моя программа на C, я не могу понять, почему я не могу расшифровать зашифрованную строку. Я хотел написать небольшую программу на C, которая берет строку, шифрует ее, затем берет зашифрованную строку и с помощью предоставленного ключа расшифровывает. Два вопроса: А) Что я здесь делаю не так? B) Как хранится ключ, то есть, если я сейчас работаю над новым шифрованием, и пользователь хочет расшифровать предыдущий текст, когда он вводит пароль, будет ли blowfish знать, как его расшифровать?

Вот документация для blowfish: http://www.openssl.org/docs/crypto/blowfish.html и теперь моя программа:

#include <string.h>
#include "blowfish.h"
#include "bf_pi.h"
#include "bf_locl.h"
#include <stdio.h>
#include <stdlib.h>

int main()
 {
    char from[128], to[128];
    int len = 128;
    BF_KEY key;
    char temp_buf[16];
    int n = 0;          /* internal blowfish variables */
    unsigned char iv[8];        /* Initialization Vector */
    /* fill the IV with zeros (or any other fixed data) */
    memset(iv, 0, 8);


    printf("input password: ");
    scanf("%s", &temp_buf);

    strcpy(from, "ABCDEFGHTHISISTHEDATA"); //ENCRYPT THIS

    BF_set_key(&key, 16, temp_buf);

    BF_cfb64_encrypt(from, to, len, &key, iv, &n, BF_ENCRYPT);
    printf("encrypted to -->  %s\n", to); //SUCCESSFULY ENCRYPTED


    BF_cfb64_encrypt(from, to, len, &key, iv, &n, BF_DECRYPT);
    printf("File %s has been decrypted to --> %s \n",from,  to); //FAILS DOES NOT DECRYPT
}

person user2740412    schedule 02.09.2013    source источник


Ответы (1)


Я думаю, вы должны поменять местами переменные from и to:

//as WhozCraig mentioned, fill in n and iv again before decryption
n = 0;          /* internal blowfish variables */
/* fill the IV with zeros (or any other fixed data) */
memset(iv, 0, 8);

BF_cfb64_encrypt(to, from, len, &key, iv, &n, BF_DECRYPT);
printf("File %s has been decrypted to --> %s \n",to,  from); //FAILS DOES NOT DECRYPT

Сохранение исходного IV (что несложно; все это были нули) и сброс n до нуля до того, как расшифровка получит то, что хочет OP – WhozCraig

person But I'm Not A Wrapper Class    schedule 02.09.2013
comment
Вы можете опубликовать результаты? - person But I'm Not A Wrapper Class; 02.09.2013
comment
ввод пароля: привет, зашифрованный в --› Z???/?w?N Z›j4??‹Vc??Wj???χ??6?+??@[=?+V??uyd%_ ?s_O??4Z??dJCw??? G?.s'?o??Io????1?ldG?aM{~?u?? ;B???RD?O ???S̆Q???ABCDEFGHTHISISTHEDATA Файл o;b?Qwr?THISISTHEDATA расшифрован в --› LANG - person user2740412; 02.09.2013
comment
Я не вижу загрузки исходного кода. Можете ли вы направить меня к нему? - person But I'm Not A Wrapper Class; 02.09.2013
comment
Можете ли вы скопировать мой код и скомпилировать его. Я не знаю, что вы подразумеваете под загрузкой исходного кода; код есть в сообщении? - person user2740412; 02.09.2013
comment
У меня нет следующего: blowfish.h, bf_pi.h, bf_locl.h - person But I'm Not A Wrapper Class; 02.09.2013
comment
Это отчасти правильно. Сохранение исходного IV (что несложно; все это были нули) и сброс n до нуля до того, как расшифровка получит то, что хочет OP. - person WhozCraig; 02.09.2013