2011-01-20 3 views
3

에 암호를 해독 할 질수 암호화 내가 PHP를 문서 저장소 응용 프로그램이 아파치 창에서 실행이,이 응용 프로그램은 다음과 같은 명령을 사용하여 업로드 된 문서 AES는 암호화 할 것이다하려면 openssl AES-256 창에 파일이 리눅스

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 
응용 프로그램이 지금까지 사람들이 업로드하고이 서버에 암호화 된 상태로 유지하는 동안 자신의 파일을 다운로드 잘 작동하고있다

이 문제는 지금이다 응용 h 아파치 리눅스 서버로 옮겨졌고, 지금은 윈도우에서 암호화 된 파일이 리눅스에서 올바르게 해독되지 않는 파일들입니다.

왜 이런가요? 암호 해독 명령이 수정되어 올바른 파일을 다시 해독 할 수 있습니까?

추신 : Linux에서 암호화 된 새 파일은 windows에서와 마찬가지로 올바르게 암호 해독됩니다. 이는 encode-on-windows decode-on-Linux의 경우 실패합니다.

답변

6

해결 방법 :-)을 발견했습니다. 문제는 Windows의 echo 명령이 암호의 끝 부분에 세 문자를 추가합니다. 즉, 공백, CR 및 LF 문자이고, Linux의 echo 명령은 문자를 제공하지 않는 것 같습니다. openssl 명령은 암호화에 사용 된 것과 동일한 암호를 수신하지 않습니다.

해결 방법은 Linux에서 암호에 3 문자를 추가하는 것이 었습니다. echo 명령에 16 진수 값을 삽입하는 이스케이프 시퀀스가 ​​있기 때문에 가능합니다. 예를 들어, 지금 나와 맞는 암호 해독 명령은 다음과 같습니다. 리눅스는 :

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

희망이 사람을 도울 수 있기를 바랍니다!

+0

파이프를 사용하지 않고'-k 'MyPass34' '를 사용하여 openssl의 암호를 직접 지정할 수 있습니다. – caf

+1

Linux에서는 "ps"명령으로 모든 프로세스의 매개 변수를 볼 수 있습니다. 비밀 번호를 명령 줄이나 보이는 위치에 놓을 필요가없는 곳에 암호를 두는 것이 좋습니다. –