2013-10-12 2 views
0

찾아 주셔서 감사합니다. 최근 보안을 강화하기 위해 비대칭 기반 RSA 시스템에 서버에 설정 한 기존의 대칭 기반 암호화 시스템을 업데이트했습니다. 나 자신을 적당히 능숙한 PHP 프로그래머라고 생각할 것이다. 그 말로 phpseclib를 사용하여이 문제에 완전히 몰두했습니다.phpseclib 클래스에 여러 번 액세스하기

내 스크립트에서 클래스의 두 인스턴스를 만들 수없는 것 같습니다. 아래 코드를 참조하십시오 :

<?php include_once('Crypt/RSA.php'); 

     function signRSA($string_to_sign){ 
     $rsa = new Crypt_RSA(); 
     $rsa->loadKey(file_get_contents('pvk.txt')); // private key 
     $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); 
     $signature = $rsa->sign($string_to_sign); 
     return base64_encode($signature); 
     } 

     function decryptRSA($string_to_decrypt){ 
     $rsa = new Crypt_RSA(); 
     $rsa->loadKey(file_get_contents('pvk.txt')); // private key 
     return $rsa->decrypt(base64_decode($string_to_decrypt)); 
     } 

    //Which ever function is on top is the only one that appears to work. The first line below will work, however the second will fail returning me a null value. 

    $sig = signRSA($_POST['data']); 
    $plain = decryptRSA($_POST['otherdata']); 
?> 

나는 '글로벌'변수를 개별적으로 만들려고 시도했습니다. 같은 일이 발생했습니다 ..

이 문제가 해결되기를 기대합니다.

UPDATE :

내가 성공적으로 나는 그것이 무슨 생각과는 아무 상관이없는 불구하고 내 문제를 방지 할 수 있었다. 위에서 본 클라이언트 응용 프로그램 (C#)과 PHP 끝이 두 가지 패딩 알고리즘을 사용하고있는 것처럼 보입니다. 이로 인해 클라이언트 응용 프로그램에서 데이터가 손상된 것으로 간주합니다. PHP 스크립트의 논리에서 위의 함수 중 하나만 작동하게되었습니다.

답변

0

그것은 나를 위해 잘 작동 :

include_once('Crypt/RSA.php'); 

     function signRSA($string_to_sign){ 
     $rsa = new Crypt_RSA(); 
     $rsa->loadKey('-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp 
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh 
3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 
pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX 
GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il 
AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF 
L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k 
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl 
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= 
-----END RSA PRIVATE KEY-----'); // private key 
     $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); 
     $signature = $rsa->sign($code); 
     return base64_encode($signature); 
     } 

     function decryptRSA($string_to_decrypt){ 
     $rsa = new Crypt_RSA(); 
     $rsa->loadKey('-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp 
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh 
3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 
pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX 
GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il 
AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF 
L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k 
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl 
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= 
-----END RSA PRIVATE KEY-----'); // private key 
     return $rsa->decrypt(base64_decode($string_to_decrypt)); 
     } 

    //Which ever function is on top is the only one that appears to work. The first line below will work, however the second will fail returning me a null value. 

    $sig = signRSA('zzzzzzzzz'); 
    $plain = decryptRSA('G0KqVsNP6qsjVkKbnfCkSsiUdDnxBzIjA1tNHCeeKgkzqdkJF/zFuzVdtc8PrEfeR+SfrvdLiR5DqlAA 
LReLD5lPrj19+3Ci+igCQebItT8xmOHmKNHM+nQK2l6uL9AW03Vy/15sCTHqZ/dfmQMarzIb05DQUX57 
ftrBGu0XLwM='); 

echo base64_encode($sig) . "\r\n"; 
echo $plain; 

아마도 키가 지원되지 않는 형식입니다? 어쩌면 암호 해독하려고하는 암호문이 개인 키와 함께 가지 않을 수 있습니까? 내가 게시 한 코드 스 니펫이 효과가 있습니까? 그렇다면 더 많은 정보를 게시해야합니다. 키와 일반 텍스트를 채우는 것과 마찬가지입니다.

+0

게시물을 제공해 주셔서 감사합니다. 내가 실제로 적절한 패딩 알고리즘을 C#에서 PHP로 연결하는 데 어려움을 겪고있는 것 같습니다. 이로 인해 해독 또는 서명 중 하나의 출력이 손상되었습니다 (클라이언트 응용 프로그램과 일치하지 않음). 나는이 문제가 phpseclib 생성자 내에서 거짓인지를 믿고있었습니다. 여기서 phpseclib 생성자는 여러 클래스 인스턴스를 만들 수 없었습니다. –

관련 문제