Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RSA解密不';行不通_Php_Encryption_Rsa_Phpseclib - Fatal编程技术网

Php RSA解密不';行不通

Php RSA解密不';行不通,php,encryption,rsa,phpseclib,Php,Encryption,Rsa,Phpseclib,我试图用PHPseclib加密和解密一个简单的字符串,但当我试图解密它时,结果是null或空的。谁能帮我一下吗 这里是我的功能 public function myEncrypt($conteudoArquivo, $private_key) { $rsa = new Crypt_RSA(); $rsa->loadKey($private_key); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);

我试图用PHPseclib加密和解密一个简单的字符串,但当我试图解密它时,结果是null或空的。谁能帮我一下吗

这里是我的功能

public function myEncrypt($conteudoArquivo, $private_key) {
    $rsa = new Crypt_RSA();
    $rsa->loadKey($private_key);
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);    
    $cipherText = base64_encode($rsa->encrypt($conteudoArquivo));
    return $cipherText;
}

public function myDecrypt($cipherText, $public_key) {
    $rsa = new Crypt_RSA();
    $rsa->loadKey($public_key);
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);    
    $plainText = base64_decode($rsa->decrypt($cipherText));
    return $plainText;
}
关键值为:

$private_key = "-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQCRwpD+gV0skm+9SHPWFXAHkWV3r37I3N4fom45Z0imih3fDk9E Q6PuFb56Vfo8IWiNUoP6Gco/eDHcInzO1SSEn07reh86Aosnnj7m/RMg1N5k7A5C NH26YlATqgJe4DX8SdS/oKLit7xTo3aR+Wg3kZOQQmE5MyRq6TVDywhNyQIDAQAB AoGAVFk4mN75sUJogSu9RMURGIAOLM2U293ceIgBqxxW0XEZyiu4uTM/WRaiLJ82 eLeIjkeS8hccj9AZYl9exD5Zq7oGTH8HDQAcmZ6p0h3faI1/sR3gnqEB28GZJyd7 MsFRlRiOEdpJAki33m/6UsJ7hRHC6X/w2K4wofzmmHopOIECQQDCAMW7gc4Gmyb1 scP8OwA75QZWgeLo36d7ynUzjqoN682ckSbIxbT6z4eYhEKE/It0gt07WTNmrL0s vv4DH15xAkEAwFcTC1/FufpDvxt+EKnANmuH5ekri1zcsY3UMJJnjH9e7szfVTH6 JfhTRRSfi/oOe1aRinfcp/zMJhkf36VA2QJAO8K5JlWJ/Yb1rWGhGaWjINAf7637 E/kxQnTPPZ6Iy9kDcWNVKyub4FblUhoL06Nn4fAd7hZAOzSi4ZHD9XpIQQJAc1MC QTygcp1jB3A1i0oszLR23FyNVldMoE044BK4cZ5hTm+arRt1MFUPoIj4DNbW3g8O 3uZ1cGf8BA/mc5NDKQJAexm+LcJ3DOTaenQwHw77bfXhbvvCtcvAlYOIawkyDlTx AkBweqy8BEJbsVRSiBv7k6Hh+T+u1ZWaKDm/ZZCMkA== -----END RSA PRIVATE KEY----- "; $public_key = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCU+1bLfPmcY7qrF/dTbAtuJlv4R/FVc1WEH9HK U0jQjX/n/db9vz/x0i3te/bKLNEcwUhBu+PWPnOt/qVURG9BUT6RsCRFUn0CyGiUKoy45o9K/mJA HmbrNtrUB6ckrYLF75Y50nUNsBVHUDw8yQymmiOBT1gc/KM5s1xTz44LMwIDAQAB -----END PUBLIC KEY-----"; $private_key=“----开始RSA私钥----- MIICWWIBAKBGQCRWPD+gV0skm+9SHPWFWXAHKWV3R37I3N4FOM45Z0IMIH3FDK9E Q6PUFB56VFO8IWINOP6GCO/eDHcInzO1SSEn07reh86Aosnnj7m/RMg1N5k7A5C NH26YLAQGJE4DX8SDS/oKLit7xTo3aR+WG3ZOQQME5MYRQ6DVDYHNYQIDAQAB AOGAVFK4MN75SUJOGSU9RMURGIAOOLM2U293CEIGBQXXW0xEZYIU4UTM/WRaiLJ82 ELEIJKES8HCJ9AZYL9EXD5ZQ7OGTH8HDQACMZ6P0H3FAI1/sR3gnqEB28GZJyd7 MsFRlRiOEdpJAki33m/6UsJ7hRHC6X/W2K4WOFZMMHOPOIECQDCAMW7GC4GMYB1 scP8OwA75QZWgeLo36d7ynUzjqoN682ckSbIxbT6z4eYhEKE/It0gt07WTNmrL0s vv4DH15xAkEAwFcTC1/FufpDvxt+EKNANMUH5EKRI1ZCSY3UMJNJH9E7SZFVTH6 JfhTRRSfi/oOe1aRinfcp/zMJhkf36VA2QJAO8K5JlWJ/Yb1rWGhGaWjINAf7637 E/kxQnTPPZ6Iy9kDcWNVKyub4FblUhoL06Nn4fAd7hZAOzSi4ZHD9XpIQQJAc1MC QTYGCP1JB3A10OSZLR23 FYNVLDMOE044BK4CZ5HTM+arRt1MFUPoIj4DNbW3g8O 3uZ1cGf8BA/mc5NDKQJAexm+LCJ3DOTAENQWHW77BFXHBVctCvalyowkydltX AKBWEQY8BEJBSVSIBV7K6HH+T+u1ZWaKDm/ZZCMkA== -----结束RSA私钥------”; $public_key=“----开始公钥----- MIGFMA0GCSQGSIB3DQEBAQUA4GNADCBIQKBGQCU+1bLfPmcY7qrF/dTbAtuJlv4R/FVc1WEH9HK U0jQjX/n/db9vz/x0i3te/bklnecwubu+PWPnOt/qVURG9BUT6RsCRFUn0CyGiUKoy45o9K/mJA HmbrNtrUB6ckrYLF75Y50nUNsBVHUDw8yQymmiOBT1gc/KM5S1XTZ44LMWIDAKAB -----结束公钥------”;
您需要用公钥加密,用私钥解密。这就是非对称加密的工作原理。在RSA中,使用私钥“加密”实际上是签名,而使用公钥“解密”则是对签名的验证

另一件事是您没有正确地反转Base64编码。因此,您需要先解码,然后解密:

$plainText = $rsa->decrypt(base64_decode($cipherText));

您提供的键不能与此代码一起使用,因为它们具有不同的模数。您可以通过以下方式生成密钥:

$rsa = new Crypt_RSA();
$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1);
$keys = $rsa->createKey(2048);
$private_key = $keys["privatekey"];
$public_key = $keys["publickey"];

它不起作用,我试图更改公钥和私钥,但加密功能只适用于私钥。除此之外,我试着按照你说的做,并将base64_decod添加到密文中,但函数decrypt仍然不返回任何值。还有什么我能做的吗?作为注释,你应该考虑使用OAEP而不是PKCS1加密模式,因为它是“最佳”的。@ FeliPethOME不要忘记损坏答案的左边的V标记来接受它,否则它仍然是“打开的”。