2014-01-15 14 views
0

RSA 비공개 키와 RSA 공개 키가 있습니다.개인 키로 서명하고 PHP에서 공개 키로 확인하는 방법

두 RS 키는 xml 버전 (<RSAKeyValue><Modulus>....)입니다.

나는 개인 키에서 PKCS8 서명을하고

내가 서명을 만들기위한이 조각 사용 PHP

에 publik 키에 의해 테스트해야합니다

$content = "test string"; 
include('Crypt/RSA.php'); 
$rsa = new Crypt_RSA(); 
$rsa->loadKey(file_get_contents("private.txt")); 
$pem_format = $rsa->getPrivateKey(); 
$pvk_res = openssl_get_privatekey($pem_format); 
$sig = ''; 
openssl_sign($content , $sig, $pvk_res, OPENSSL_ALGO_SHA1); 
$signature = base64_encode($sig); 

서명을 만들기위한이 올바른 방법입니다?

이제 공개 키를 사용하여 서명의 정확성을 테스트하는 방법 ??

+0

http://www.php.net/manual/en/function.openssl-verify.php –

답변

1

PKCS8은 서명이 아닌 키 형식과 관련이 있습니다.

또한 phpseclib를 사용하여 키를 pem으로 변환 한 다음 openssl을 사용합니다. 왜 모든 것을 위해 phpseclib을 사용하지 않는가?

http://phpseclib.sourceforge.net/rsa/examples.html#sign,sign2

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

$rsa = new Crypt_RSA(); 
//$rsa->setPassword('password'); 
$rsa->loadKey('...'); // private key 

$plaintext = '...'; 

$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); 
$signature = $rsa->sign($plaintext); 

$rsa->loadKey('...'); // public key 
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified'; 
?> 
+0

감사 : 그 시점에서 당신은이 예제를 사용할 수 있습니다. '$ rsa-> verify ($ plaintext, $ signature)'**는 'unverified'** ** : ( –

+0

) 당신은 그 코드를 그대로 사용하고 있거나 자신이 필요하다고 생각하는 부분을 자신의 라이브러리에 붙여 넣었습니까? ? 후자가'$ rsa-> setSignatureMode (CRYPT_RSA_SIGNATURE_PKCS1)'에 대해 잊지 않는다면. – neubert

+0

나는 그것을 그대로 복사하고'$ rsa-> loadKey ('...'); // public key' 대신에 '$ rsa-> loadKey ('public.txt'); // 공개 키'그리고 그것은 작동하지 않았습니다.이'$ rsa-> loadKey ('private.txt'); // public key'를 사용했을 때! !하지만 개인 키가 아닌 공개 키로 확인하고 싶습니다 !!! –