使用rsa公钥解密

jc3wubiy  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(241)

我正在阅读一份关于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-----
svdrlsy4

svdrlsy41#

使用私钥加密和使用公钥解密仅在签名/验证的上下文中进行。
相反,通常称为加密/解密(出于保密目的)的方法使用公钥进行加密,使用私钥进行解密。
请注意,这两个进程通常不能通过交换密钥来相互转换,因为它们使用不同的填充。
通常,在验证时,解密在引擎盖下执行,只有验证结果向外返回: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将其转换为php代码的x.509/spki格式:

openssl rsa -pubout -RSAPublicKey_in -in <path to pkcs#1 public key> -out <path to x.509/spki public key>

相关问题