Я пытаюсь реализовать цифровую подпись в php, как в примере кода Java ниже:
Signature rsaSig = Signature.getInstance("MD5withRSA");
RSAPrivateKey clientPrivateKey = readPrivateKeyFromFile(fileName);
rsaSig.initSign(clientPrivateKey);
String source = msg;
byte temp[] = source.getBytes();
rsaSig.update(temp);
byte sig[] = rsaSig.sign();
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(sig);
Мой php код:
$rsa = new Crypt_RSA();
$rsa->loadKey('...'); // in xml format
$plaintext = '...';
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$signature = $rsa->sign($plaintext);
Но похоже, что чего-то не хватает. Мы должны получить ту же подпись, что и при возврате java-кода. Кто-нибудь может мне помочь?
По умолчанию phpseclib использует sha1 в качестве хеша. Вам, вероятно, нужно сделать $rsa->setHash('md5')
,
Других решений пока нет …