【发布时间】:2019-11-01 14:49:52
【问题描述】:
现在我被困在这一天了。我环顾四周,但无法解决问题。
JAVA 代码:
public String generateDigitalSignedToken(String requestData) throws Exception
{
Signature signature = Signature.getInstance("SHA1withRSA");
PrivateKey privateKey = this.readPrivateKeyFromFile(busPrivateFile);
signature.initSign(privateKey, new SecureRandom());
byte[] message = requestData.getBytes();
signature.update(message);
byte[] sigBytes = signature.sign();
return Base64.getEncoder().encodeToString(sigBytes);
}
PHP 代码:
$rsa = new RSA();
$rsa->loadKey($publicKey);
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
$rsa->setHash("sha1");
$rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
$receivedHash = $rsa->decrypt($decodedHash);
待办事项
- 解密令牌以获取接收到的哈希。
- 第二个任务是重新创建哈希并将其与接收到的哈希进行比较。
重新创建哈希的代码
$temp = new RSA();
$temp->setHash('sha1');
$temp->setSignatureMode(RSA::SIGNATURE_PKCS1);
$generatedHash1 = $temp->hash->_sha1($decryptedBody);
//Or simply
$generatedHash2 = sha1($data, true);
以下是值:
"receivedHash" => b"0!0\t\x06\x05+\x0E\x03\x02\x1A\x05\x00\x04\x14öRM▀ÿuï®▀Q÷Å\x06M¬Õ \x16{M^"
"generatedHash1" / "generatedHash2" => b"öRM▀ÿuï®▀Q÷Å\x06M¬Õ\x16{M^"
可以看出,即使在两端使用相同的字符串时,哈希也会部分匹配。
谁能帮我解决这个问题? 我将不胜感激。
编辑:
使用的 PHP 库:https://github.com/phpseclib/phpseclib
【问题讨论】:
-
我们不知道您使用的是什么 PHP RSA 库。
-
您好@JamesReinstateMonicaPolk,已更新问题,请检查。
-
@JamesReinstateMonicaPolk - 该库的文档位于 phpseclib.sourceforge.net
-
@JamesReinstateMonicaPolk - 根据 packagist 的说法,最常用的是 2.0。你选择了正确的版本 - 我没有大声笑。今晚晚些时候我会尝试提交错误报告!
-
@JamesReinstateMonicaPolk - 现在看起来效果更好了!可能需要刷新缓存!
标签: java php rsa sha1 phpseclib