Шифрование и дешифрование маленького файла с помощью openssl

Я начал работать с lxml некоторое время назад, когда возникла необходимость разобрать некоторые html-файлы. Я как-то установил его, а затем через некоторое время потерял установку из-за формата ПК.

Установить lxml на Windows из доступных двоичных файлов / колес довольно просто. Приведенная ниже ссылка содержит двоичные файлы / диски на случай, если они вам понадобятся.

http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

После загрузки файла колеса в соответствии с вашей Windows вы можете выполнить следующую команду pip install

И в случае, если вы используете git-sdk-win32 для Windows, вы можете сначала найти libxml2-devel, libxml2-python и libxslt-devel, libxslt-python, используя pacman, выполнив нижеприведенное команда.

pacman -Ss libxml2

и

pacman -Ss libxslt

, затем вы можете установить lxml с помощью приведенной ниже команды

pip install lxml . собрать колесо (как это было для меня), но я установлю lxml, используя setup.py

Я просто начал любить этот git-win32-sdk. Это помогает мне работать в Windows с тем, что я изучил в Linux.

[1 124] https://github.com/git-for-windows/build-extra/releases [1 124]

22
задан jww 5 July 2014 в 02:07
поделиться

3 ответа

Предыдущие ответы указали вам, как делать то, о чем вы просили.

Я хотел бы добавить пару слов о том, почему вам, вероятно, не следует этого делать .

То, о чем вы говорите, называется «симметричным шифрованием» (один и тот же ключ используется для шифрования и дешифрования, в отличие от асимметричного шифрования, при котором все, что зашифровано одним ключом, может быть расшифровано только конкретным аналогом).

Дизассемблирование исполняемого файла для определения используемого жестко запрограммированного ключа почти тривиально. Это означает, что любой, кто когда-либо получит в свои руки один из ваших исполняемых файлов, может взломать шифрование любого сообщения, которым когда-либо обменивались.

Если приложение, которое вы имеете в виду, не является очень конкретным, это означает, что ваша установка может «выглядеть» безопасно, но не так. В этих случаях это ' Как правило, лучше вообще не шифровать, чтобы никто из участников не поддался ложному чувству безопасности ...

Очень хорошо, что вы ищете стандартные библиотеки для шифрования (вместо того, чтобы самостоятельно реализовать / создать алгоритм ), но протокол ( как приложения, ключи и сообщения используются и обмениваются) по крайней мере так же важен, как и сам шифр. Возможно, вы захотите, чтобы ваши идеи проверил кто-нибудь, занимающийся криптографией, чтобы выявить слабые места. (Я уверен, что здесь, в StackOverflow, такого достаточно. ;-))

но протокол (, как приложения, ключи и сообщения используются и обмениваются) по крайней мере так же важен, как и сам шифр. Возможно, вы захотите, чтобы ваши идеи проверил кто-нибудь, занимающийся криптографией, чтобы выявить слабые места. (Я уверен, что здесь, в StackOverflow, такого достаточно. ;-))

но протокол (, как приложения, ключи и сообщения используются и обмениваются) по крайней мере так же важен, как и сам шифр. Возможно, вы захотите, чтобы ваши идеи проверил кто-нибудь, занимающийся криптографией, чтобы выявить слабые места. (Я уверен, что здесь, в StackOverflow, такого достаточно. ;-))

13
ответ дан 29 November 2019 в 05:04
поделиться

OpenSSL специально занимается реализацией SSL и TLS, которые являются протоколами для шифрования данных в сети. Поскольку вы просто хотите зашифровать файл, можно использовать OpenSSL, но это не идеально.

Вместо этого я бы использовал что-то вроде BeeCrypt или Crypto ++ ® Library 5.6.0 которые оба предоставляют примеры их использования.

1
ответ дан 29 November 2019 в 05:04
поделиться

Ideally, you could use an existing tool like ccrypt, but here goes:

#include <openssl/aes.h>

/* ... */


{
  int bytes_read, bytes_written;
  unsigned char indata[AES_BLOCK_SIZE];
  unsigned char outdata[AES_BLOCK_SIZE];

  /* ckey and ivec are the two 128-bits keys necesary to
     en- and recrypt your data.  Note that ckey can be
     192 or 256 bits as well */
  unsigned char ckey[] =  "thiskeyisverybad";
  unsigned char ivec[] = "dontusethisinput";

  /* data structure that contains the key itself */
  AES_KEY key;

  /* set the encryption key */
  AES_set_encrypt_key(ckey, 128, &key);

  /* set where on the 128 bit encrypted block to begin encryption*/
  int num = 0;

  while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);

    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
           AES_ENCRYPT);

    bytes_written = fwrite(outdata, 1, bytes_read, ofp);
    if (bytes_read < AES_BLOCK_SIZE)
  break;
  }
}

Decryption is done by calling AES_cfb128_encrypt with AES_DECRYPT as the last parameter. Note that this code hasn't been given anything more than the most elementary of testing, and that you really should use proper 8-bits random data for ckey and ivec.

EDIT: It seems AES_cfb128_encrypt accepts data of arbitrary length, so you're not required to encrypt in blocks of AES_BLOCK_SIZE (16) bytes.

21
ответ дан 29 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: