2013-05-06 88 views
1

在JAVA代碼(BouncyCastle lib)中,我們使用私鑰創建簽名。下面的代碼。 我們有一個任務是使用PHP獲得相同的簽名---使用相同的私鑰。 嘗試使用PHP代碼像簽名問題--- openssl_sign

openssl_sign($plainText, /*&*/$signature, $private_key); 

但簽名,我們在PHP中得到的是不簽名,我們在JAVA得到相同的。

可能是我們有問題,因爲openssl_sign()函數不與'MD5withRSA'一起工作---可能有人知道如何解決這個問題?

protected byte[] sign(PrivateKey privateKey, byte[] plainText) { 
    byte[] signature = null; 
    try { 
     Signature sig = Signature.getInstance("MD5withRSA"); 
     sig.initSign(privateKey); 
     sig.update(plainText); 
     signature = sig.sign(); 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } 
    return signature; 
    } 

回答

1

不能幫你出一噸與OpenSSL的,但這裏是你如何與phpseclib, a pure PHP RSA implementation做到這一點:

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

$rsa = new Crypt_RSA(); 
//$rsa->setPassword('password'); 
$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 

$plaintext = '...'; 

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

echo bin2hex($signature);