Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RSA公钥包装对称密钥会导致DomeException(InvalidAccessError)_Javascript_Typescript_Web_Cryptography - Fatal编程技术网

Javascript 使用RSA公钥包装对称密钥会导致DomeException(InvalidAccessError)

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

我试图使用Web Crypto API包装对称密钥,但出现错误:
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(“我失败了”,错误));