吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 638|回复: 15
收起左侧

[讨论] rsa 不同的公钥加密码 可以用不同的私钥解密?

[复制链接]
calm2023 发表于 2024-6-27 19:57
//  npm install node-jsencrypt
JSEncrypt = require("node-jsencrypt");

// 创建RSA加密对象
var encrypt = new JSEncrypt();

// 公钥
pub_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFMjUfalWn/hx4n+acT1D8lYUW/3V068a4swOBiQfSQbWNx8kX1K6vq1klB1QiT3ZealVH3eO22X5l3jCMuUO7sr0xPbEztclB84Dzq4NX4wlwgcjHFvhdjL0jWEyVmLPyDTMpTTguz5fAmJaT+E85/rWDdK4UjSRRPX+om3EzFObQc1OpqzxV1fv5XMgNhpz7AxBkgMEiIDKKSPi1Wc1Zw7P3zqI3YsKppz5XK3un8gitWBZ3gJ2xdCvRAibH2RCp9KBFnAk8U4qB/fYS+fHhp1fO//JFYLo2xS4FVAcQCPMUFkyjWq32CjNkExBVhWcq5uXmwrruZDDoayTmq7EQIDAQAB";

// 私钥
pri_key = 'MIIEogIBAAKCAQEAyFMjUfalWn/hx4n+acT1D8lYUW/3V068a4swOBiQfSQbWNx8kX1K6vq1klB1QiT3ZealVH3eO22X5l3jCMuUO7sr0xPbEztclB84Dzq4NX4wlwgcjHFvhdjL0jWEyVmLPyDTMpTTguz5fAmJaT+E85/rWDdK4UjSRRPX+om3EzFObQc1OpqzxV1fv5XMgNhpz7AxBkgMEiIDKKSPi1Wc1Zw7P3zqI3YsKppz5XK3un8gitWBZ3gJ2xdCvRAibH2RCp9KBFnAk8U4qB/fYS+fHhp1fO//JFYLo2xS4FVAcQCPMUFkyjWq32CjNkExBVhWcq5uXmwrruZDDoayTmq7EQIDAQABAoIBAATpW5YrX3OAFizlGmqadyMLczxlQTcP9E5eC8Zxp71Bu4qVYVfUhBfjIhIzzHmHhtSl7+DJ8z8Zbp4p0s1ePG9YeqMYELOAgu0TdOA+ttHXmwu2RF5B0ROtiesd/82grJQq0wghnlaj8Rv+7zJi6c4VWi5VW2MkUholJJL9JGghLrjMcdflqM36XN6e9kESVOJrN8IPbEfH03JRgiEBj7aMpKbxizYTvXYOkFUqUkKgOdB+tZAnYGDRkLNOQhPcl+RChHqiwn7NI3XyhQpHc0UWv4sUe2yi18CxzTv5wR51eovq43nkYCPkLjA2GeH36fZHy1//BQwlQfdlpU/Ls08CgYEA0+FQJuG3Z4vvS0wGbEz9zgah7POVEinDqwtEdZ60CJhjotXJfeUz5CVkUm2CrpMp6URT1z+/WE+q4vIrQYpCwRQk6JR720W0Ko1cs8xipAvniq1jiipPEwXojqSTY/2N5JpRssHeS79HLSwQyjdUpQpkaYp0xdrgwr/a7r2vwSMCgYEA8gnX06L4ln+cM1yr4yhsIJ41go/KDMEvfp7bNejAKPkOIZK/X6oL3hrtlAkvnbpBGRovck8VQMuBX/IleX4mWj/AwwW4znWcEqGn9IPqE0gLyIE2ZanEa3qP3A+FdsVm+2hfSggnChzIRmulg1ajBg4FMdDnKrG+56DBelBxaDsCgYB4t2duL63J3g1hThheveLg7iB1mzY0mfz0R8Aib2BNgV1LGhjplJvjAXbOC7yn8Aqx748BFT3Ud9d549XHSpnL3clFhcunW2hR0iad/fW5V1r9RNpwjrhsszITiyq6jmy4cT/Y4+HeMEXCM9gBDlM4kNoy04LCc3kZHCwFV6d6FwKBgC7ZAuJe3/jZWFWEsWx1bYBevwK3bCdN2TCL9OgZVeBYXIjZC5uroUJrOeL2aDYCUAlYzSg18GorOa5lgyVh6nB7eIcG+39SulPM4GJuigcTYdx8ThgdZPxcq62vf2i+yrEMwazlqRDHA2jF+zJRuZo5an367lOQNeBFeE2BdoHzAoGACkqOsBKDMvX6sObd0j/Hwx2AVePfJqbIEQNH/kncKKdI1i1hjDTgZ4VV5q+PzpaFOc0LkZCpXhopqHQ7O7qMmE79fPdllCam1E1kRjN0M9YX5/WeaxKFh9wMG1VOfQg3MoLPbM8afI5hdvqvc70nMH/tyu4hpKyFyeFEmOLoSoY=';


pub_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn/kEwHkaXLbWzUeTsFRxKxtEKexVCqdS3rQyiw9hnFjFTHYF4xHyrIh+ZAdvlmILx7cLL35xJeDLhrKP8RoPqfIgzG4J++Ie5J0PPKnQNCYI4T7wuwoBNkfQJPT35zdIczwKR0qQqBg00Q0PM5c9fAyukKHiVX2BHnxd2ODGzs+j8SKUn38R9XJni7l58toxUvhXWpeZ3c2YJo21oOi7A/FVQR2NcCIaud33ONv305T4UMmHQyu05xuYFXZfB/vTxi/gRgZDlaTwVT7TSgodoZAbGU4QL4J8IMWkdPWaMnCFgZoihCwLuFrqOiK1oehd7yGHwkSvMZzuAIgHFDQhhQIDAQAB';
//pri_key = 'MIIEowIBAAKCAQEAn/kEwHkaXLbWzUeTsFRxKxtEKexVCqdS3rQyiw9hnFjFTHYF4xHyrIh+ZAdvlmILx7cLL35xJeDLhrKP8RoPqfIgzG4J++Ie5J0PPKnQNCYI4T7wuwoBNkfQJPT35zdIczwKR0qQqBg00Q0PM5c9fAyukKHiVX2BHnxd2ODGzs+j8SKUn38R9XJni7l58toxUvhXWpeZ3c2YJo21oOi7A/FVQR2NcCIaud33ONv305T4UMmHQyu05xuYFXZfB/vTxi/gRgZDlaTwVT7TSgodoZAbGU4QL4J8IMWkdPWaMnCFgZoihCwLuFrqOiK1oehd7yGHwkSvMZzuAIgHFDQhhQIDAQABAoIBAD3o7mjatVQaQokRYVvFYkKve7LJzqOf29dqX4Enw7vxMvIDXwXgxUz2SgvGQO4vJaX19fM8eOeS1tFbO4+waU148i6Li3uaqCALlIECqxvzeE5LwHhyR8PNCQW0dFhcMcK/Aq9ScSdMruwUpMRvjJD8i3ZX4DL7rkOxF9S+MNKKNp/0xMcu43mFVvay7a77LC2v9uw5ucgcJTxyd5exPAGnAfXz2OGRfR4ngIXFUS2vIXdMgI2OR7vA6OBcVs3H6pfvQjuztKJY9GQP9qHPRuXAlFICGYVmkBzbe+Hb30u53pmfwKatAT3qtY6jBkzo2Zjaa8pew0kEhRaTaAuCf+UCgYEAyD1B94u9zSihwdFV2yidEgsa57kB/+zd6u910EQtYd4EuKLco28r8DxsACpn00D1V1vZryAavDm5UP2dnDJjPg9CZytH4juyL3J4EbRu4HE2P9VBqRUmH/0gKtQDh9DdCaizUUFP3bwAIzFyob5T2cvRjQvnYYRcQFTa5aNlcvsCgYEAzIU4tjsDAC5CTgQDBaxiQR2IGZUps81eICxtdSly4/ROBHW9jLIeMyI0TCGfbI8l9frIBF2pEQriEH63iCPIXQgCfvqwAPqHbCQgu3MrIlR15TZG2Tl3yelKSJIzmMyyNwueHJBkK19SQPq7mE43Qfp5YuD5MKZ2M+7AmDiclX8CgYBlr34NeOB1C/pBE85W0iQZopwSKsiSL7ZudRZOIiEtvvKE1OfY8z7L69MormA1TpqIt3MvVM1e4q1yLKjaRlhRjqw4+iiyAYC2SZoh25Am2DclaWXDuKK4wfGQ7kOwt+dX3VzamaE2SB+Fv7mn26B3TOLojq/8vJuga7cRwM1m+wKBgQCaFXh/moANP8zGeDFKsfAofLZQB9guVXgnpzEkBwE/Co1IwOf4uy0Tex6JiP9SS5re8nyFBYddhqSApudhEwxeQq2WuwmlAxrJ94INl5wUtitIcBb6i1hbb35+pF9pLDbMT91kScieAKe4uu5gtfTdqXaQb0xuQctmHudNB8G4wwKBgBkTAObd2dslpUaRt4JXHqpOjfrCy+WV0SjB1AK+azU8yY0TQVxnA7hU00HZSalZiB59Xfh3hjls/zSA8Fxig3L1ngjzjvdAASsUmuAOSNlR7BgyAppORJUZHG+kVuatv9Z/hF7UgtK5K/6xVRNJ9pFf0suKgHZ0XlGzlQ17hQL9';


data=
'神奇';

//使用公钥
encrypt.setPublicKey(pub_key);
//使用私钥
encrypt.setPrivateKey(pri_key);

res=encrypt.encrypt(data);
console.log(
'加密结果');
console.log(res);
console.log(
'解密');
console.log(encrypt.decrypt(res));

//  以上是测试代码

















发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gunxsword 发表于 2024-6-27 22:20
公私钥是对应的
kittylang 发表于 2024-6-27 22:33
本帖最后由 kittylang 于 2024-6-27 22:38 编辑



什么意思?你不妨说得明白些。

如果你是指,用公玥A加密,可以用私玥B解密?答案是:如果AB是一对的,那确实,因为这就非对称加密,用A加密,必须A解密的那叫对称加密,例如DES


如果你是指,用公玥A加密,可以用私玥B解密,可以用C解密吗,那当然不行,公私钥是对应的。要是随便一个私玥都能解密那还有啥意义
qnom8Tos 发表于 2024-6-28 01:20
Vvvvvoid 发表于 2024-6-28 06:17
密钥对啊

公钥跟私钥是一对一的
 楼主| calm2023 发表于 2024-7-1 12:48
kittylang 发表于 2024-6-27 22:33
什么意思?你不妨说得明白些。

如果你是指,用公玥A加密,可以用私玥B解密?答案是:如果AB是一对的 ...

加了公钥私钥 的 注释pub_key 和 pri_key的是第一组      没加注释的是第二组     用第一组私钥  和 第二组的公钥 放在一起运行 能正常加解密,
 楼主| calm2023 发表于 2024-7-1 12:50

是的,当想验证 不同组的   公钥 和 私钥  是不能混着用的,出现了这个情况,
 楼主| calm2023 发表于 2024-7-1 12:51
Vvvvvoid 发表于 2024-6-28 06:17
密钥对啊

公钥跟私钥是一对一的

是的,就是想验证 这个理论,不是同一组的   公钥 和 私钥  是不能混着用的,但测试时出现了这个情况,没找到问题所在,所以发出来请教
kittylang 发表于 2024-7-1 23:14

懂你说的了。这不是 rsa 的问题,而是 node-jsencrypt 这个库的问题,这玩意最后一版都 7 年前了。它并没有完全实现 rsa

出现这个问题的原因是你写了如下代码

//使用公钥
encrypt.setPublicKey(pub_key);
//使用私钥
encrypt.setPrivateKey(pub_key);

其结果是将 pub_key 和 pub_key 当成了一对。即使它们并不是通过 openssl 生成的一对。

使用如下代码

const JSEncrypt = require('node-jsencrypt');
// 创建RSA加密对象
const encrypt = new JSEncrypt();

// 公钥(你给的第一个公钥)
const pub_key =
  'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFMjUfalWn/hx4n+acT1D8lYUW/3V068a4swOBiQfSQbWNx8kX1K6vq1klB1QiT3ZealVH3eO22X5l3jCMuUO7sr0xPbEztclB84Dzq4NX4wlwgcjHFvhdjL0jWEyVmLPyDTMpTTguz5fAmJaT+E85/rWDdK4UjSRRPX+om3EzFObQc1OpqzxV1fv5XMgNhpz7AxBkgMEiIDKKSPi1Wc1Zw7P3zqI3YsKppz5XK3un8gitWBZ3gJ2xdCvRAibH2RCp9KBFnAk8U4qB/fYS+fHhp1fO//JFYLo2xS4FVAcQCPMUFkyjWq32CjNkExBVhWcq5uXmwrruZDDoayTmq7EQIDAQAB';

const data = '神奇';

//使用公钥
encrypt.setPublicKey(pub_key);

const res = encrypt.encrypt(data);
console.log('加密结果');
console.log(res);

得到一个加密后的 res

然后再

const JSEncrypt = require('node-jsencrypt');
// 创建RSA加密对象
const encrypt = new JSEncrypt();

// 私钥(将你的第一个或者第二个私钥)
const pri_key = 'xxxxxxxxxxxxxx';

//使用公钥
encrypt.setPublicKey(pub_key);

const res = encrypt.decrypt(`之前的结果`);
console.log('解密结果:');
console.log(res);

你就能发现,密钥真的需要配对才行(狗头)

最后,并不建议使用 node-jsencrypt 这个老掉牙的

在 node 中可以直接使用以下代码(新版本可能需要node --security-revert=CVE-2023-46809 index.js 加上安全忽略标志)

或者第三方库直接用 jsencrypt(node-jsencrypt 就是用的这个的老版本)。

const { publicEncrypt, constants, privateDecrypt } = require('crypto');

function rsaEncrypt(publicKey, text) {
  return publicEncrypt(
    {
      key: `-----BEGIN PUBLIC KEY-----\n${publicKey}\n-----END PUBLIC KEY-----`,
      padding: constants.RSA_PKCS1_PADDING,
    },
    Buffer.from(text, 'utf8')
  ).toString('base64');
}

function rsaDecrypt(privateKey, text) {
  return privateDecrypt(
    {
      key: `-----BEGIN RSA PRIVATE KEY-----\n${privateKey}\n-----END RSA PRIVATE KEY-----`,
      padding: constants.RSA_PKCS1_PADDING,
    },
    Buffer.from(text, 'base64')
  ).toString('utf8');
}

// 公钥
const pub_key =
  'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFMjUfalWn/hx4n+acT1D8lYUW/3V068a4swOBiQfSQbWNx8kX1K6vq1klB1QiT3ZealVH3eO22X5l3jCMuUO7sr0xPbEztclB84Dzq4NX4wlwgcjHFvhdjL0jWEyVmLPyDTMpTTguz5fAmJaT+E85/rWDdK4UjSRRPX+om3EzFObQc1OpqzxV1fv5XMgNhpz7AxBkgMEiIDKKSPi1Wc1Zw7P3zqI3YsKppz5XK3un8gitWBZ3gJ2xdCvRAibH2RCp9KBFnAk8U4qB/fYS+fHhp1fO//JFYLo2xS4FVAcQCPMUFkyjWq32CjNkExBVhWcq5uXmwrruZDDoayTmq7EQIDAQAB';

// 私钥
const pri_key =
  'MIIEogIBAAKCAQEAyFMjUfalWn/hx4n+acT1D8lYUW/3V068a4swOBiQfSQbWNx8kX1K6vq1klB1QiT3ZealVH3eO22X5l3jCMuUO7sr0xPbEztclB84Dzq4NX4wlwgcjHFvhdjL0jWEyVmLPyDTMpTTguz5fAmJaT+E85/rWDdK4UjSRRPX+om3EzFObQc1OpqzxV1fv5XMgNhpz7AxBkgMEiIDKKSPi1Wc1Zw7P3zqI3YsKppz5XK3un8gitWBZ3gJ2xdCvRAibH2RCp9KBFnAk8U4qB/fYS+fHhp1fO//JFYLo2xS4FVAcQCPMUFkyjWq32CjNkExBVhWcq5uXmwrruZDDoayTmq7EQIDAQABAoIBAATpW5YrX3OAFizlGmqadyMLczxlQTcP9E5eC8Zxp71Bu4qVYVfUhBfjIhIzzHmHhtSl7+DJ8z8Zbp4p0s1ePG9YeqMYELOAgu0TdOA+ttHXmwu2RF5B0ROtiesd/82grJQq0wghnlaj8Rv+7zJi6c4VWi5VW2MkUholJJL9JGghLrjMcdflqM36XN6e9kESVOJrN8IPbEfH03JRgiEBj7aMpKbxizYTvXYOkFUqUkKgOdB+tZAnYGDRkLNOQhPcl+RChHqiwn7NI3XyhQpHc0UWv4sUe2yi18CxzTv5wR51eovq43nkYCPkLjA2GeH36fZHy1//BQwlQfdlpU/Ls08CgYEA0+FQJuG3Z4vvS0wGbEz9zgah7POVEinDqwtEdZ60CJhjotXJfeUz5CVkUm2CrpMp6URT1z+/WE+q4vIrQYpCwRQk6JR720W0Ko1cs8xipAvniq1jiipPEwXojqSTY/2N5JpRssHeS79HLSwQyjdUpQpkaYp0xdrgwr/a7r2vwSMCgYEA8gnX06L4ln+cM1yr4yhsIJ41go/KDMEvfp7bNejAKPkOIZK/X6oL3hrtlAkvnbpBGRovck8VQMuBX/IleX4mWj/AwwW4znWcEqGn9IPqE0gLyIE2ZanEa3qP3A+FdsVm+2hfSggnChzIRmulg1ajBg4FMdDnKrG+56DBelBxaDsCgYB4t2duL63J3g1hThheveLg7iB1mzY0mfz0R8Aib2BNgV1LGhjplJvjAXbOC7yn8Aqx748BFT3Ud9d549XHSpnL3clFhcunW2hR0iad/fW5V1r9RNpwjrhsszITiyq6jmy4cT/Y4+HeMEXCM9gBDlM4kNoy04LCc3kZHCwFV6d6FwKBgC7ZAuJe3/jZWFWEsWx1bYBevwK3bCdN2TCL9OgZVeBYXIjZC5uroUJrOeL2aDYCUAlYzSg18GorOa5lgyVh6nB7eIcG+39SulPM4GJuigcTYdx8ThgdZPxcq62vf2i+yrEMwazlqRDHA2jF+zJRuZo5an367lOQNeBFeE2BdoHzAoGACkqOsBKDMvX6sObd0j/Hwx2AVePfJqbIEQNH/kncKKdI1i1hjDTgZ4VV5q+PzpaFOc0LkZCpXhopqHQ7O7qMmE79fPdllCam1E1kRjN0M9YX5/WeaxKFh9wMG1VOfQg3MoLPbM8afI5hdvqvc70nMH/tyu4hpKyFyeFEmOLoSoY=';

const data = '神奇';

const res = rsaEncrypt(pub_key, data);
console.log('加密结果:');
console.log(res);
console.log('解密结果:');
console.log(rsaDecrypt(pri_key, res));
pjy612 发表于 2024-7-4 16:15
也许可以尝试换成这个顺序


[Asm] 纯文本查看 复制代码
data='神奇';

//使用公钥
encrypt.setPublicKey(pub_key);
res=encrypt.encrypt(data);
console.log('加密结果');
console.log(res);

//使用私钥
encrypt.setPrivateKey(pri_key);
console.log('解密');
console.log(encrypt.decrypt(res));
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表