зашифрованный файл openssl aes-256 на windows не может быть расшифрован на linux - PullRequest
3 голосов
/ 20 января 2011

У меня есть приложение хранилища документов php, работающее на Windows Apache, это приложение будет шифровать любой загруженный документ с помощью следующей команды:

echo MyPass34 | openssl.exe aes-256-cbc -pass stdin -salt -in somefile.pdf -out somefile.pdf

, а также расшифровывает их при загрузке с помощью следующей команды:

echo MyPass34 | openssl.exe aes-256-cbc -pass stdin -d -in somefile.pdf -out decriptedfile.pdf

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

Почему это? Есть ли возможная настройка команды дешифрования, чтобы она снова правильно расшифровала эти файлы?

PS: новые файлы, зашифрованные в linux, правильно расшифровываются, как и в windows, - это кодированный на windows случай декодирования на linux.

1 Ответ

6 голосов
/ 20 января 2011

Я нашел решение :-), проблема в том, что команда windows echo добавляет в конец пароля три символа - пробел, символы CR и LF, и команда linux echo, кажется, не передает эти символы, поэтому Команда openssl не получает тот же пароль, который использовался для шифрования.

Решением было добавить эти три символа в пароль в Linux, что возможно, потому что у команды echo есть escape-последовательности для вставки шестнадцатеричных значений. Итак, следуя моему примеру, правильная команда расшифровки, которая сейчас работает для меня в Linux это:

echo $'MyPass34\x20\x0d\x0a' | /usr/bin/openssl aes-256-cbc -pass stdin -d -in somefile.pdf -out decriptedfile.pdf

Надеюсь, это кому-нибудь поможет!

...