Внешний интерфейс: Barrett.js, BigInt.js, RSA.js
Back-end: Node.js, Node-RSA
Я попытался использовать экспоненту (e) и модуль (n), которые из узла rsa, чтобы сгенерировать publicKey на странице.Затем используйте publicKey для шифрования моей строки.Наконец, я использую закрытый ключ для расшифровки строки со страницы, но у меня ничего не получается.Я получил ошибку типа 'Ошибка при расшифровке (возможно, неправильный ключ).Исходная ошибка: Ошибка: Неверные данные или ключ '.
Буду очень признателен, если кто-нибудь сможет помочь ~
Ниже приведены простые коды:
// rsa.pug
h2 n:
#J_ComN #{n}
h2 e:
#J_ComE #{e}
h2 Message:
#J_Message Hello RSA!
script(src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js")
script(src="/javascripts/rsa/Barrett.js")
script(src="/javascripts/rsa/BigInt.js")
script(src="/javascripts/rsa/RSA.js")
script(src="/javascripts/rsa.js")
// Front-end codes
var comN = document.getElementById('J_ComN').innerHTML; // n
var comE = document.getElementById('J_ComE').innerHTML; // e
var Message = document.getElementById('J_Message').innerHTML;
setMaxDigits(130); // 1024bits=130,2048bits=260
var publicKey = new RSAKeyPair(comE, '', comN); // n + e -> public key
console.log('publicKey:', publicKey);
var encodedMessage = encodeURIComponent(Message);
console.log('After encodeURIComponent:', encodedMessage);
var encryptedData = encryptedString(publicKey, encodedMessage);
console.log('After encrypting:', encryptedData);
$.ajax({
url: '/rsa/encrypt',
method: 'POST',
data: {
encryptedData: encryptedData
}
}).then(function (res) {
debugger;
}, function () {
});
// Back-end codes
const NodeRSA = require('node-rsa'); // Node RSA
const key = new NodeRSA({
b: 1024
});
key.setOptions({
encryptionScheme: 'pkcs1' // 'pkcs1_oaep' or 'pkcs1'. Default 'pkcs1_oaep'
});
const publicComponents = key.exportKey('components-public');
console.log('publicComponents: ', publicComponents);
// { n: <Buffer 00 bc ... >, e: 65537 }
const express = require('express');
const router = express.Router();
// rsa page
router.get('/', function (req, res, next) {
var n = publicComponents.n.toString('hex'); // n -> hex
var e = publicComponents.e.toString(16); // e -> hex
res.render('rsa', {
n: n,
e: e
// n: publicComponents.n,
// e: publicComponents.e
});
});
// decrypt the encrypted data
router.post('/encrypt', function (req, res, next) {
var body = req.body;
var encryptedData = body.encryptedData;
console.log('Encrypted data:', encryptedData);
// 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'.
const decrypted = key.decrypt(encryptedData, 'utf8');
console.log('decrypted: ', decrypted);
});