php - JSEncrypt 可以签名和验证,但 PHP openssl_verify 失败
问题描述
JSEncrypt 可以签名和验证,但 PHP openssl_verify 失败
使用 JSEncrypt 签名/验证消息可以正常工作。但是,当我使用 openssl_verify 将数据发送到 PHP 服务器进行验证时,它会返回:
错误:0906D06C:PEM 例程:PEM_read_bio:没有起始行
知道为什么吗?
//////////////browser side
var signatory = new JSEncrypt();
var privateKey = document.getElementById("privkey").value;
signatory.setPrivateKey(privateKey);
var message = document.getElementById("pseudo").value;
var rsa_sha256_signature = signatory.sign(message, CryptoJS.SHA256);
document.getElementById("email").value = rsa_sha256_signature;
console.log("signature: " + rsa_sha256_signature);
/* verify */
var verifier = new JSEncrypt();
var publicKey = document.getElementById("pubkey").value;
verifier.setPublicKey(publicKey);
if (verifier.verify(message, rsa_sha256_signature, CryptoJS.SHA256)) {
console.log("valid signature !");
}else{
console.log("invalid signature!")
}
/////////////data is sent to server:
req.open("POST", "sign.php", true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var donnees = "message=" + document.getElementById('pseudo').value +
"&signature=" + document.getElementById('email').value +
"&key_pub=" + document.getElementById("pubkey").value;
req.send(donnees );
/////////////server side
$message = $_POST ['message'];
$entityBody = file_get_contents('php://input');
$detach = explode("&",$entityBody);
$cherche_signature = 'signature=';
$cherche_key_pub = 'key_pub=';
$foundEncryptedText="no";
foreach($detach as $value){
if (strpos($value, $cherche_signature) !== false) {
$found_signature = substr($value, strlen($cherche_signature));
}
if (strpos($value, $cherche_key_pub) !== false) {
$foundkey_pub = substr($value, strlen($cherche_key_pub));
}
}
$result = openssl_verify( $message , $found_signature , $foundkey_pub , OPENSSL_ALGO_SHA256 );
echo "valid= " . $result;
echo "erreur : <br>".openssl_error_string();
解决方案
推荐阅读
- ajax - 使用 foreach 将结果 ajax 传递给刀片
- database - 当 posrgresql 内存不足且未运行时如何从磁盘空间中删除表
- user-experience - UX 官方 Android Auto 平面图标
- python - 如何检查来自不同函数的两个变量是否相等?
- python - 为什么不调用 __del__ 方法?
- amazon-web-services - 如何为 dynamodb-local 配置 AWS 凭证?
- android-studio - 如何在我的应用程序中同步服务器时间。我不想使用设备当地时间
- c++ - 为什么继承链 D->B,C->A 中 A 成员的访问会导致歧义?
- flutter - 在小部件被移除之前应用动画
- python - 检查行值是否等于列名并访问列的值