签名问题--openssl_sign [英] Problems with signature --- openssl_sign
问题描述
在JAVA代码(BouncyCastle lib)中,我们使用私钥创建签名.下面的代码. 我们有一个任务要使用PHP获得相同的签名---使用相同的私钥. 尝试使用
In JAVA code (BouncyCastle lib) we create signature using private key. Code below. We have a task to get the same signature using PHP --- using the same private key. Try to use PHP code like
openssl_sign($plainText, /*&*/$signature, $private_key);
但是我们在PHP中获得的签名与我们在JAVA中获得的签名不同.
But signature that we get in PHP is not the same with signature that we get in JAVA.
可能是我们有问题,因为openssl_sign()函数无法与"MD5withRSA"一起使用---也许有人知道如何解决此问题?
May be we have problem because openssl_sign() function doesnt' work with "MD5withRSA" --- may be somebody know how to solve this problem ?
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;
}
推荐答案
Can't help you out a ton with openssl but here's how you'd do it with 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);
这篇关于签名问题--openssl_sign的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!