Node.js правильный способ сделать шифрование RSA?

Я пытаюсь создать WS для запроса мыла. В теле сообщения есть поле, содержащее зашифрованный текст.
У меня есть открытый ключ для шифрования текста, но единственный результат, который я получаю, — это то, что текст не распознается.
Я использую криптомодуль узла для выполнения запроса, и текст зашифрован, но я не знаю, почему не зашифровано исправление.

PS Я сделал то же самое на PHP с функцией openssl_public_encrypt и работает. Но я должен сделать это в node.js.

Любая идея или предложение? Чем openssl_public_encrypt отличается от функции crypto.publicEncrypt?

Вот зашифрованная часть в node.js:

var crypto = require("crypto");
var fs = require('fs');

fs.readFile("./certificate.pem", 'utf8', function (err, data) {
var bufferToEncrypt = new Buffer("textToEncrypt");
var encrypted = crypto.publicEncrypt({"key":data, padding:crypto.RSA_NO_PADDING}, bufferToEncrypt).toString("base64");
console.log(encrypted);  // length 128
}

То же самое в php:

<?php

$publicKey = "./certificate.pem";
$plaintext = "textToEncrypt";

openssl_public_encrypt($plaintext, $encrypted, $publicKey);

echo base64_encode($encrypted);   //encrypted string length 128

?>

У меня нет личного ключа для расшифровки текста, у меня есть только открытый ключ.

Также обратите внимание, что длина зашифрованного текста (в base64) одинакова в php и в node.js.

0

Решение

Я думаю, что заполнение это ваша проблема. В node.js вы указываете padding:crypto.RSA_NO_PADDING, При поиске документа openssl_public_encrypt() он говорит, что использует OPENSSL_PKCS1_PADDING по умолчанию. Попробуйте следующее:

var constants = require("constants");
var encrypted = crypto.publicEncrypt({"key":data,
padding:constants.RSA_PKCS1_PADDING}, bufferToEncrypt).toString("base64");

Я подготовил демо онлайн:

  1. Зашифровать с помощью node.js
  2. скопировать полученную строку
  3. и вставьте его в $encrypted_encoded на Пример расшифровки PHP

Совет: как правило, не используйте асимметричное шифрование для реальных сообщений. Используйте его для защиты симметричного ключа. Однако ваш вариант использования может быть действительным, я просто хочу заявить об этом каждый раз, когда кто-то говорит о шифровании RSA.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]