首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用RSA公钥解密

用RSA公钥解密
EN

Stack Overflow用户
提问于 2021-07-27 13:50:13
回答 1查看 2.2K关注 0票数 2

我正在阅读关于Linux/Edbury恶意软件的报告,其中包括用于解密DNS TXT记录的RSA公钥,以及一些示例记录及其解密的内容。我希望自己执行此操作,但无法解决如何使用公钥解密。有几个网站似乎无法使用给定的公钥解密,而且即使在使用RSA_public_decrypt时,PHP也无法理解密钥格式。

代码语言:javascript
复制
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公钥:

代码语言:javascript
复制
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOadSGBGG9x/f1/U6KdwxfGzqSj5Bcy4aZpKv77uN4xYdS5HWmEub5Rj
nAvtKybupWb3AUWwN7UPIO+2R+v6hrF+Gh2apcs9I9G7VEBiToi2B6BiZ3Ly68kj
1ojemjtrG+g//Ckw/osESWweSWY4nJFKa5QJzT39ErUZim2FPDmvAgMBAAE=
-----END RSA PUBLIC KEY-----
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-27 16:07:49

私钥加密和公钥解密仅在签名/验证上下文中进行。

相反,通常所指的加密/解密(为保密目的)使用公钥进行加密,私钥用于解密。

请注意,这两个进程通常不能通过交换密钥相互转换,因为它们使用不同的填充。

通常,在验证时,解密是在遮罩下执行的,只有验证结果才会向外返回: true或false。

然而,openssl_public_decrypt()支持显式允许解密的低级别验证。如果执行此操作,则生成的明文为:

代码语言:javascript
复制
op3f1libgh.biz:3005980741:1622505600

相应的PHP代码是:

代码语言:javascript
复制
$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代码:

代码语言:javascript
复制
openssl rsa -pubout -RSAPublicKey_in -in <path to pkcs#1 public key> -out <path to x.509/spki public key>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68546158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档