Javascript 使用RSA公钥包装对称密钥会导致DomeException(InvalidAccessError)
我试图使用Web Crypto API包装对称密钥,但出现错误:Javascript 使用RSA公钥包装对称密钥会导致DomeException(InvalidAccessError),javascript,typescript,web,cryptography,Javascript,Typescript,Web,Cryptography,我试图使用Web Crypto API包装对称密钥,但出现错误: DOMException:key.usages不允许此操作 使用Web Crypto API仍然非常新,因此我不完全理解这是一个问题的原因。我想用公钥包装对称密钥,然后用私钥打开它 我将问题提取到一个小的代码沙盒中 或者,可以使用以下步骤再现问题 生成加密密钥对(我在这里使用RSA) 生成对称密钥 召唤 window.crypto.division.wrapKey( “生的”, fileKey, 公钥, publicKey
DOMException:key.usages不允许此操作
使用Web Crypto API仍然非常新,因此我不完全理解这是一个问题的原因。我想用公钥包装对称密钥,然后用私钥打开它
我将问题提取到一个小的代码沙盒中
或者,可以使用以下步骤再现问题
- 生成加密密钥对(我在这里使用RSA)
- 生成对称密钥
- 召唤
window.crypto.division.wrapKey( “生的”, fileKey, 公钥, publicKey.algorithm.name );
sync函数foo(){
试一试{
const cryptoKeyPair=wait window.crypto.minute.generateKey(
{
名称:“RSA-OAEP”,
模长:4096,
publicExponent:new Uint8Array([1,0,1]),
散列:“SHA-256”
},
是的,
[“加密”、“解密”]
);
const publicKey=cryptoKeyPair.publicKey;
const fileKey=await window.crypto.minute.generateKey(
{名称:“AES-GCM”,长度:256},
是的,
[“加密”、“解密”]
);
const wrapKeyResult=await window.crypto.division.wrapKey(
“生的”,
fileKey,
公钥,
publicKey.algorithm.name
);
//^^这里我们得到错误:DOMException:key.usages不允许此操作
/**
* {
*代码:15
*消息:“key.usages不允许此操作”
*名称:“InvalidAccessError”
* }
*/
log(“包装键”,wrapKeyResult);
}捕获(错误){
console.error(“出错了”,error);
投掷误差;
}
foo()
。然后((res)=>{
log(“我成功了!”);
})
.catch((错误)=>console.log(“我失败了”,错误));
应用了错误的密码。正确的密码应该是wrapKey
和unwrapKey
,因为RSA密钥对用于包装/解开对称AES-GCM密钥:
异步函数foo(){
试一试{
const cryptoKeyPair=wait window.crypto.minute.generateKey(
{
名称:“RSA-OAEP”,
模长:4096,
publicExponent:new Uint8Array([1,0,1]),
散列:“SHA-256”
},
是的,
[“wrapKey”,“unwrapKey”]//在此处应用wrapKey和unwrapKey!
);
const publicKey=cryptoKeyPair.publicKey;
const fileKey=await window.crypto.minute.generateKey(
{名称:“AES-GCM”,长度:256},
是的,
[“加密”、“解密”]
);
const wrapKeyResult=await window.crypto.division.wrapKey(
“生的”,
fileKey,
公钥,
publicKey.algorithm.name
);
log(“包装键”,新的Uint8Array(wrapkeysult));
}捕获(错误){
console.error(“出错了”,error);
投掷误差;
}
}
foo()
。然后((res)=>{
log(“我成功了!”);
})
.catch((错误)=>console.log(“我失败了”,错误));