Javascript RSA-OAEP不适用于任意输入长度
我正在尝试使用SublecryPto在javascript(firefox)中加密字符串。问题是,加密只对短输入有效。一旦字符串(testdata)超过190个字符,它将失败并出现操作错误。 为什么SublecryPto会这样做?我如何解决它 代码:Javascript RSA-OAEP不适用于任意输入长度,javascript,encryption,rsa,webcrypto-api,Javascript,Encryption,Rsa,Webcrypto Api,我正在尝试使用SublecryPto在javascript(firefox)中加密字符串。问题是,加密只对短输入有效。一旦字符串(testdata)超过190个字符,它将失败并出现操作错误。 为什么SublecryPto会这样做?我如何解决它 代码: 经过一些研究,我发现您的问题可能有以下原因: 特定于浏览器: 错误的Firefox版本。v34支持该库,而且兼容性级别可能取决于您使用的浏览器版本。确保您有正确的版本: 加密数据时: normalizedAlgorithm的计数器成员没有长
经过一些研究,我发现您的问题可能有以下原因: 特定于浏览器:
- 错误的Firefox版本。v34支持该库,而且兼容性级别可能取决于您使用的浏览器版本。确保您有正确的版本:
- normalizedAlgorithm的计数器成员没有长度为16字节
- normalizedAlgorithm的长度成员为零或大于128
- 密钥生成失败
通常,您会使用RSA对对称密钥进行加密,然后使用对称密钥对实际数据进行加密。通常被称为。它不适用于firefox 45/47或chrome 49。所有机具子机具PTO。密钥生成成功。我如何检查normalizedAlgorithm?恐怕我不知道=(那么,对于批量加密,您会推荐什么加密方案?下面是我在基于HTML5的JS中尝试这种混合方法的一个例子:。我不是密码专家,但它可以工作。
function str2ab(str) {
var encoder = new TextEncoder('utf-8');
return encoder.encode(str);
}
function ab2str(buf) {
var decoder = new TextDecoder('utf-8');
return decoder.decode(buf);
}
var keypair;
var algorithmKeyGen = {
name: 'RSA-OAEP',
modulusLength: 2048,
publicExponent: new Uint8Array([1,
0,
1
]), // Equivalent to 65537
hash: {
name: 'SHA-256'
}
};
var crypter = window.crypto.subtle;
function encrypt(buffer) {
return crypter.encrypt(algorithmKeyGen, keypair.publicKey, buffer).then(
function(data) {
alert(ab2str(data));
},
function(error) {
alert(error);
}
);
}
var testdata = "aasasadasdaasasadasdaasazzzzzzzzzzzzzzzzzzzzuuuuuuuuuuuuuuuuuuuuuuuzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzuuuuudddsdfssssssssssdddddddddddzzzzzzzzzzzzzzzzzzzzzzzzzzzzzppppppggppppppppppppppppssssstt"
crypter.generateKey(algorithmKeyGen, true, [
'sign',
'encrypt',
'decrypt',
'verify',
'deriveKey'
]).then(function(res) {
keypair = res;
encrypt(str2ab(testdata));
}, console.error.bind(console, 'Unable to generate a key'));