2011-03-15 4 views
0

내 스크립트는 을 사용하여 다른 프로그램에서 RSA로 암호화 된 문자열의 암호를 해독합니다. 현재는 파일에 기록합니다. 그러나 텍스트 편집기에서 열려고하면 인코딩을 감지 할 수 없다고 말합니다. 내가 그것을 반향하려고하면 아무 것도 나타나지 않습니다. 길이를 출력하면 3 대신 256이 표시됩니다.RSA 암호 해독 데이터 손상

출력 파일에서 cat 터미널 명령을 사용하면 올바른 데이터가 제공되므로 암호 해독이 올바르게 수행되었음을 알고 있습니다.

$ cat decrypted.txt 

이것은 문자 인코딩 문제인 것처럼 보입니다. 내가 듣는 문제는 PHP에서 많은 고통을 줄 수 있습니다. 나는 심지어 utf8_encode()을 시도했다. 문제는 무엇일까요?

이 여기에 코드입니다 :

$results = ''; 
openssl_private_decrypt(
    base64_decode(
     <<<EOS 
QWlG+AZIt9GE0hw0wwcPRtUWueMLBxj3YWpa5zQBoz1ttnt7TvlxDtYWZcvaUL/qr2CJCADE2iTR 
G72FhAwew2fhqlqmsxL7Nns3yegflTTMXyilVM3mPU4Cx94ylLfa+ZrqrNEepaRorNJ/js5iTq9i 
avegO/kYOv4zhEsZirlk/Mj0vVv6irWo8WyZoCDC2SwfGWeSUI8F4pq4FUkRh9V/0zAUZ+3P0A7Z 
SrA80dSa6U/J+poRcmE1vRLQXvM8dBtFRKmb0zfltLUBMcMhcglzAhcpemJ99OCZmUuynFRcRNkj 
CkOLsO+lSHntcbmXqsKE+of78gnU3tp5hHSHIg== 
EOS 
    ), 
    $results, 
    openssl_pkey_get_private(
     // load private key 
    ), 
    OPENSSL_NO_PADDING 
); 
echo $results; 
+0

코드 및 샘플 입력 – AbiusX

+0

특히 암호화 된 문자열을 파일에 쓰는 코드를 표시 한 다음 다시 읽는 데 사용하는 코드를 표시 할 수 있습니까? 또한 여기서는'utf8_encode/decode'를 사용해서는 안됩니다. 암호화 된 데이터는 문자 스트림이 아닌 바이트 스트림입니다. – Charles

+2

길이 차이는 암호화 기능이 원본 데이터를 암호화 알고리즘의 필수 블록 크기로 채우는 데도 발생할 수 있습니다. –

답변

1

데이터를 해독 한 결과 예상되는 데이터의 길이가 아닌 단일 블록의 길이가 정확히 padding 문제를 가리키고 있습니다.

양쪽 모두에 동일한 padding flag을 사용하고 있는지 확인하십시오.

+0

감사합니다, 나는 PKCS1을 none 대신 사용하도록 양쪽을 설정 했으므로 이제는 정상적으로 작동합니다. – Jonah

0

내가 openssl_private_decrypt에 익숙하지 않은 해요,하지만 당신이 openssl_private_encrypt하는() 'D 데이터 base64_encode를 제공 ​​할 것이라고 나에게 논리적 인 것 같다().

그런 경우 해독시 잘못된 순서로 실행하여 데이터를 변조하는 것입니다.

문자열을 먼저 해독 한 다음 암호화되지 않은 문자열에서 base64_decode()를 실행하는 것처럼 보입니다.

+0

좋은 생각이지만, 불행히도 그렇지 않습니다. 내 다른 프로그램 (실제로는 자바로 작성)에서 데이터를 암호화 한 다음 base64로 인코딩하여 HTTP를 통해이 스크립트로 안전하게 전송합니다. – Jonah