我正在阅读关于Linux/Edbury恶意软件的报告,其中包括用于解密DNS TXT记录的RSA公钥,以及一些示例记录及其解密的内容。我希望自己执行此操作,但无法解决如何使用公钥解密。有几个网站似乎无法使用给定的公钥解密,而且即使在使用RSA_public_decrypt时,PHP也无法理解密钥格式。
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
模量= 168035759425641708560180952719202232808157544797727790464247213618476179383712253107003583015178435839911886769263163903424281459625379125873822735102370865763929704190706996338108960579432721666779496862012535830896815985724121830861130439235763053507097455518214304803032061390442053402776406921786417516093
如何使用任何方法用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-----发布于 2021-07-27 16:07:49
私钥加密和公钥解密仅在签名/验证上下文中进行。
相反,通常所指的加密/解密(为保密目的)使用公钥进行加密,私钥用于解密。
请注意,这两个进程通常不能通过交换密钥相互转换,因为它们使用不同的填充。
通常,在验证时,解密是在遮罩下执行的,只有验证结果才会向外返回: true或false。
然而,openssl_public_decrypt()支持显式允许解密的低级别验证。如果执行此操作,则生成的明文为:
op3f1libgh.biz:3005980741:1622505600相应的PHP代码是:
$publicKey = "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmnUhgRhvcf39f1OincMXxs6ko
+QXMuGmaSr++7jeMWHUuR1phLm+UY5wL7Ssm7qVm9wFFsDe1DyDvtkfr+oaxfhod
mqXLPSPRu1RAYk6ItgegYmdy8uvJI9aI3po7axvoP/wpMP6LBElsHklmOJyRSmuU
Cc09/RK1GYpthTw5rwIDAQAB
-----END PUBLIC KEY-----";
$signature = base64_decode("P999MR0e//emIov0Z2qtoKKKhFtb1F6l+zMxn9a3q2p18ZWeaTyPXMAlXDAQI3bz6pxmeQzGCuz1P1ms25AiPKGuqhZ+etJXVnjy9Ir4zc2UU3jyeFZhs7UEfGAcZut5LY9dt5tCJKhPhYwbz4s2ZixBVUWPbFDuODCJIi4L3fw=");
openssl_public_decrypt($signature, $decrypted, $publicKey, OPENSSL_PKCS1_PADDING);
print($decrypted) . PHP_EOL; // op3f1libgh.biz:3005980741:1622505600请注意,您使用PKCS#1格式指定了公钥,并使用openssl将其转换为X.509/SPKI格式的PHP代码:
openssl rsa -pubout -RSAPublicKey_in -in <path to pkcs#1 public key> -out <path to x.509/spki public key>https://stackoverflow.com/questions/68546158
复制相似问题