我正在阅读一份关于linux/edbury恶意软件的报告,其中包括用于解密dns txt记录的rsa公钥,以及一些示例记录及其解密内容。我想自己执行此操作,但无法解决如何使用公钥解密。一些网站似乎无法使用给定的公钥解密,php也无法理解密钥格式,即使使用 RSA_public_decrypt
.
php > $b = base64_decode("P999MR0e//emIov0Z2qtoKKKhFtb1F6l+zMxn9a3q2p18ZWeaTyPXMAlXDAQI3bz6pxmeQzGCuz1P1ms25AiPKGuqhZ+etJXVnjy9Ir4zc2UU3jyeFZhs7UEfGAcZut5LY9dt5tCJKhPhYwbz4s2ZixBVUWPbFDuODCJIi4L3fw=");
php > $d = '';
php > echo file_get_contents("pub.pem");
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOadSGBGG9x/f1/U6KdwxfGzqSj5Bcy4aZpKv77uN4xYdS5HWmEub5Rj
nAvtKybupWb3AUWwN7UPIO+2R+v6hrF+Gh2apcs9I9G7VEBiToi2B6BiZ3Ly68kj
1ojemjtrG+g//Ckw/osESWweSWY4nJFKa5QJzT39ErUZim2FPDmvAgMBAAE=
-----END RSA PUBLIC KEY-----
php > openssl_public_decrypt($b,$d,file_get_contents('pub.pem'));
PHP Warning: openssl_public_decrypt(): key parameter is not a valid public key in php shell code on line 1
然后,我可以使用该网站提取指数和模量,该网站提供:
指数=65537
模数=168035754256417085601809527192022232808157544797727790464247213618476179383712253107003583015178435899118867692163903424281459625379225379125873822735210237086576397041906996338108960579472216669968620125335889681598572218308611339235763053507045182144803206139020520540534076217816093
如何使用任何方法用rsa公钥解密txt记录?
加密消息(在base64中): P999MR0e//emIov0Z2qtoKKKhFtb1F6l+zMxn9a 3q2p18ZWeaTyPXMAlXDAQI3bz6pxmeQzGCuz1P1 ms25AiPKGuqhZ+etJXVnjy9Ir4zc2UU3jyeFZhs 7UEfGAcZut5LY9dt5tCJKhPhYwbz4s2ZixBVUWP bFDuODCJIi4L3fw=
rsa公钥:
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOadSGBGG9x/f1/U6KdwxfGzqSj5Bcy4aZpKv77uN4xYdS5HWmEub5Rj
nAvtKybupWb3AUWwN7UPIO+2R+v6hrF+Gh2apcs9I9G7VEBiToi2B6BiZ3Ly68kj
1ojemjtrG+g//Ckw/osESWweSWY4nJFKa5QJzT39ErUZim2FPDmvAgMBAAE=
-----END RSA PUBLIC KEY-----
1条答案
按热度按时间svdrlsy41#
使用私钥加密和使用公钥解密仅在签名/验证的上下文中进行。
相反,通常称为加密/解密(出于保密目的)的方法使用公钥进行加密,使用私钥进行解密。
请注意,这两个进程通常不能通过交换密钥来相互转换,因为它们使用不同的填充。
通常,在验证时,解密在引擎盖下执行,只有验证结果向外返回:true或false。
openssl_public_decrypt()
但是,支持显式允许解密的低级验证。如果执行此操作,则生成的纯文本为:相应的php代码是:
请注意,您以pkcs#1格式指定了公钥,我使用openssl将其转换为php代码的x.509/spki格式: