Рейтинг:0

Подготовить модуль подписи/проверки из node js crypto

флаг cn

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

'использовать строгий';

константное крипто = требуется ('крипто');
const fs = требуется ('fs');
постоянный путь = требуется ('путь');

const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));
const encryptDataPath = path.join(__dirname, 'encryptData.txt');
let encryptData = fs.readFileSync(encryptDataPath).toString();

//console.log(encryptData);


// начинаем декодирование
const plainEncryptData = Buffer.from(encryptData, 'base64').toString();


const [signatureb64, contentb64] = plainEncryptData.split('\n');


константная подпись = Buffer.from(signatureb64, 'base64');
константное содержимое = Buffer.from(contentb64, 'base64').toString();

const verifier = crypto.createVerify('RSA-SHA256');
верификатор.обновление(содержание);
верификатор.конец();

const isValid = verifier.verify (publicKey, подпись);

если (! Действительно) {
    console.log('недействительно');
} еще {    
    console.log(содержимое);
}

Вот открытый ключ (pub.key):

-----НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApuI1XlPkYos3WsSeVPtS
l1Q2k8GnLEO5vFZ4EuSghMbqI+yE0tWVEaiptdV3KgeraALRXmH+IFrHqvSRjKQC
1ORUarBU5ntWbNER713R3K0BPOzz9OOoWHdk+Wmr4ViOTk0iD1u4bw/97RpyMoBm
+pXeBLHbEESK2kelk+LEmKUoY5nXp6KzZV5wxgD5QweZheU7mjXL5WMpIBJva8kp
RZMYXEF+USZIep0q5FHEo2AazGUMAU3GjY/dpXisLmtleOa1xlKZmkvaXl/D2Mhb
BBqPbDMa72ToZg2J8K5UP9zXUP41FHr7o9rwSJ2uOkuZPg5nhDXeoVbrJwxP/U1M
нКИДАКАБ
-----КОНЕЦ ОТКРЫТОГО КЛЮЧА-----

Вот encryptData.txt (зашифровать данные)

ZmZzeUNhcmU2Q1pTRHo2M0VrT0tGeGJUWitDMGJydnF0dzRWZDc5STJIUTJuWndPZzVoaE8rbU5keEhIMHBEak0xVUxHRGNYQ0w1Wk5maVN4M096dDJXZEowSmk4R1pGZTZOc0s1dm05SDJHd1hUR3Q0VHl1ejFkbGlqbjRwcTBSM0xLSDl6SThWT1RLNTdySWlGeVZQa0pxQzJJMkowaW1LYTZxbWpGU0hsVTVQU3BrVk9YYUxGMVJNQjBsWm5ncDcwMEJXT1k4V3FlSHlvS0pKY0NXTkpJRGRDWEw1ZWpuTXFpY0VUTzZWV25BMThkVitRQUZRS2k5SG5SR1VuVGhlYUI2QU9jcWRzMGZzWVlvM0xZZlQwbDZELzJHd0dJZXZ3LzlxMmoxVmJKcFNBUTBldTJYUlJ4Z2VFZmFlQys0MUZIZ0haNHc4UXBmb09leW1WSkN3PT0KZXlKMGVYQmxJam9pWW5KdmJucGxJaXdpWTNWemRHOXRaWEpKWkNJNklqRTJRMDlXVWxOak9YZ3lNV1pEU0c1Rklpd2laWGh3YVhKbFFYUWlPakUyTWpZMU56WXpOakl3TURBc0ltbHpWSEpwWVd3aU9uUnlkV1VzSW14cFkyVnVjMlZMWlhraU9pSmpPVEk1TldJMk9TMWlaV1UyTFRRek1XRXRPR1EzWkMwd1lqYzBNR1l3TVdOaE1tUWlMQ0pqY21WaGRHVmtRWFFpT2pFMk1qVXpOalkzTmprMU16Rjk=

Теперь я пытаюсь создать свой модуль подписи, который будет создавать данные шифрования так же, как encryptData.txt:

'использовать строгий';

константное крипто = требуется ('крипто');
const fs = требуется ('fs');
постоянный путь = требуется ('путь');

const publicKey = fs.readFileSync(path.join(__dirname, 'key.pub'));

пусть содержание = {}
content.type = "бронза";
content.customerId = "16COVRSc9x21fCHnE";
content.expireAt = 1626576362000;
content.isTrial = истина;
content.licenseKey = "c9295b69-bee6-431a-8d7d-0b740f01ca2d";
content.createdAt = 1625366769531;


const encryptDataPath = path.join(__dirname, 'encryptData.txt');
пусть a = fs.readFileSync(encryptDataPath).toString();

// подпись
const signer = crypto.createSign('RSA-SHA256');
подписывающий.обновление(содержание);
подписывающий.конец();

константная подпись = signer.sign (publicKey, 'base64');

console.log('знак:', подпись);
 

Но когда я запускаю этот модуль шифрования, он выдает эту ошибку:

внутренний/крипто/util.js:97
    выдать новый ERR_INVALID_ARG_TYPE(
    ^

TypeError [ERR_INVALID_ARG_TYPE]: Аргумент «данные» должен быть одним из следующих типов: string, Buffer, TypedArray или DataView. Объект полученного типа
    в Sign.update (внутренний/crypto/sig.js:49:10)
    в Object.<anonymous> (/home/ubuntu/www/node-encrpt/encode.js:23:8)
    в Module._compile (внутренний/модули/cjs/loader.js:959:30)
    в Object.Module._extensions..js (внутренние/модули/cjs/loader.js:995:10)
    в Module.load (внутренний/модули/cjs/loader.js:815:32)
    в Function.Module._load (internal/modules/cjs/loader.js:727:14)
    в Function.Module.runMain (внутренний/модули/cjs/loader.js:1047:10)
    во внутреннем/основном/run_main_module.js:17:11 {
  код: "ERR_INVALID_ARG_TYPE"
}

Я не могу понять, почему это происходит.

Как я могу завершить модуль шифрования?

DannyNiu avatar
флаг vu
Поскольку *роли* открытого и закрытого ключа RSA математически симметричны, многие путают подпись RSA с "шифрованием с помощью закрытого ключа". Для подписи RSA требуется закрытый ключ, но вы, похоже, используете открытый ключ для подписи в своем коде. Попробуйте перепроверить пару ключей и использование API.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.