Php RSA解密不';行不通
我试图用PHPseclib加密和解密一个简单的字符串,但当我试图解密它时,结果是null或空的。谁能帮我一下吗 这里是我的功能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);
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标记来接受它,否则它仍然是“打开的”。