Крипто-модуль Node.js выдает «rsa_ossl_public_decrypt: данные больше, чем mod len» при расшифровке - PullRequest
0 голосов
/ 21 октября 2019

ИСПРАВЛЕНО ДЕКОДИРОВАНИЕМ БАЗЫ64 Я ПОЛУЧИЛ

privateDec({key: this.privateKey, padding: utils.constants.RSA_PKCS1_OAEP_PADDING}, Buffer.from(body, 'base64'));

Примечание Buffer.from(body, 'base64'). Я забыл декодировать полученную строку, которая была закодирована в base64.

Извините!


Я пытаюсь защитить сокетное соединение с помощью асимметричного шифрования. Шифрование работает нормально, но когда я пытаюсь расшифровать строку, отправленную клиентом, я получаю следующую ошибку:

Error: error:0406706C:rsa routines:rsa_ossl_public_decrypt:data greater than mod len

Дело в том, что строка не длиннаядостаточно, чтобы «переполнить» ограничение, налагаемое длиной используемого мной модуля (которая равна 4096).

Вот как я это реализую:

// client.js

const enc_text = publicEncrypt(
{
   key: serverPublicKey, // I'm using the server's public key to encrypt the message
   padding: constants.RSA_PKCS1_PADDING
}, Buffer.from('test string', 'utf-8')).toString('base64');

// the buffer is sent with an header (0x0001) because of the messaging system I've implemented

var message = Buffer.alloc(6 + enc_text.length);
message.writeInt16BE(0x0001, 0);
message.writeInt32BE(enc_text.length + 6, 2)
message.write(enc_text, 6);

client.write(message);

И здесь все работаетпросто хорошо. Ошибка возникает в этом фрагменте кода ниже:

// server.js
const header      = data.readInt16BE(0), // 2B header
      body_length = data.readInt32BE(2), // 4B is the number identifying the body length
      body        = data.toString('ascii', 6, body_length); // 2 + 4 = 6, the actual body starts from the 6th byte

var a = privateDecrypt(
{
   key: this.privateKey, // and here I'm using the server's private key to decrypt the message
   padding: constants.RSA_PKCS1_PADDING
},
 Buffer.from(body));

Я уже пытался использовать constants.RSA_PKCS1_PADDING для удаления заполнения, но я получил еще одну ошибку, говорящую прямо противоположное: данные слишком короткие, чтобы их можно было зашифровать.

...