2017-01-07 2 views
0

PHP에서 16 문자 문자열을 RSA 알고리즘 및 PKCS # 1 패턴으로 공개 키 (SanitalCF.cer)에 포함시켜 암호화해야합니다. 마지막으로 base64로 인코딩해야합니다.RSA PKCS # 1은 PHP로 암호화합니다.

이 코드를 tryed했는데, 무엇이 문제입니까?

function EncryptData($source) 
{ 
    $fp=fopen("cert/SanitelCF.cer","r"); 
    $pub_key=fread($fp,8192); 
    fclose($fp); 

    openssl_public_encrypt($source,$crypttext, $pub_key); 

    return(base64_encode($crypttext)); 
} 
+1

:

이제 인증서는이 같은 뭔가해야 그래서, 공개 키를 포함, 공개 키 아닌가요? –

+0

PEM으로 인코딩 된 인증서도 함께 보내주십시오 (필요한 경우 openssl 명령 줄을 사용하여 변환 할 수 있음). –

+0

안전하지 않은 PKCS # 1 패딩 형식을 사용하려는 이유는 무엇입니까? 참고 : [ROBOT] (https://robotattack.org/). 대신 libsodium 또는 OAEP를 원합니다. –

답변

0

우선 인증서가 PEM 형식 (DER 형식 아님)인지 확인하십시오. file <file>.cer을 사용하여이 작업을 수행 할 수 있습니다. 그렇지 않은 경우 mv <file>.cer <file>.der; openssl x509 -inform DER -in <file>.der -out <file>.cer을 사용하여 변환하십시오. 물론 자신의 인증서 파일 이름을 대체하십시오. 당신이 그것을 실행할 때 어떤 일이 발생, 나도 몰라

<?php 
function EncryptData($source) 
{ 
    $fp=fopen("<file>.cer","r"); 
    $cert_data=fread($fp,8192); 
    fclose($fp); 

    $cert = openssl_x509_read($cert_data); 
    $pub_key = openssl_get_publickey($cert); 
    openssl_public_encrypt($source, $crypttext, $pub_key); 

    return(base64_encode($crypttext)); 
} 

EncryptData("owlstead"); 
?> 
+0

경고 : openssl_public_encrypt() : 10 행의 C : \ Apache24 \ htdocs \ rx \ test.php에서이 개인 키에서 공개 키를 얻는 방법을 모르겠다. 경고 : openssl_public_encrypt() : 키 매개 변수가 10 행의 C : \ Apache24 \ htdocs \ rx \ test.php에있는 유효한 공개 키가 아닙니다. –

+0

PEM 형식임을 확인했습니다. –

+0

시도중인 인증서/키에 '파일 '을 수행 할 수 있습니까? PEM을 게시하십시오 (주석이 아닌 질문에!). –

관련 문제