我尝试将加密数据从服务器发送到客户端并使用window.crypto.subtle.decrypt()
对其进行解密。但我没有描述就得到了错误。我该如何解决?
node.js服务器代码:
const sharedKey = (req, res, next) => {
let crypto = require('crypto');
let buf = Buffer.from('Hello, my friend');
const key = {
key: req.body.public,
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}
try {
let encrypted = crypto.publicEncrypt(key, buf);
res.send(encrypted.toString('base64'));
} catch (err) {
console.log('err', err)
}
};

客户代码:
$.post('/register', {
'login': login,
'public': publicKeyPEM
}, function(data) {
console.log('data', data);
data = Ocrypto.base64ToArrayBuffer(data);
try {
window.crypto.subtle.decrypt({
name: "RSA-OAEP",
//label: Uint8Array([...]) //optional
},
keyPair.privateKey, //from generateKey or importKey above
data //ArrayBuffer of the data
)
.then(function(decrypted) {
//returns an ArrayBuffer containing the decrypted data
console.log(new Uint8Array(decrypted));
})
.catch(function(err) {
console.log("ERRRRRR", err);
});
} catch (error) {
console.log('err', err)
}
});

我在控制台中得到的东西:" ERRRRRR DOMException"
答案 0 :(得分:0)
data = Ocrypto.base64ToArrayBuffer(data);
好像你有错字。
答案 1 :(得分:0)
我不知道如何解决这个问题,但我找到了另一种方法来完成mu项目的工作。 我在服务器上使用node-rsa,在browserify
构建后在客户端上使用{{3}}