gpt4 book ai didi

encryption - 为什么 WebCryptoAPI RSA-OAEP 加密函数无法使用给定 key 大小的预期最大块大小?

转载 作者:行者123 更新时间:2023-12-02 00:52:55 26 4
gpt4 key购买 nike

我正在尝试使用 crypto.subtle.encrypt加密一些数据并遇到了我一次可以加密的数据量的麻烦。使用 RSA-OAEP 的 2048 位 key 的最大块大小为 214 字节,如链接 crypto.stackexchange.com 中所示和 stackoverflow.com使用关系 maxChunkSizeInBytes = keySizeInBytes – 42 .

使用 crypto.subtle.encrypt使用 2048 位 key 和 RSA-OAEP 算法,我只能加密 190 字节。低于 190 字节的任何数量都可以正常工作,高于 190 字节的任何数量都会导致错误。我不完全确定错误的类型(因为我无法捕捉到它),但我认为它是 OperationError , 引用 developer.mozilla.org .

在此处显示的 TypeScript 示例中,有两个数据块 d1d2大小分别为 190 字节和 214 字节。数据块d1加密很好,但是,d2才不是。

const MSG_LEN_1 = 190;
const MSG_LEN_2 = 214;

const d1 = (window.crypto.getRandomValues(new Uint8Array(MSG_LEN_1))).buffer;
const d2 = (window.crypto.getRandomValues(new Uint8Array(MSG_LEN_2))).buffer;

let encData = async (data: ArrayBuffer) => {
const key = await crypto.subtle.generateKey(
{
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256",
},
true,
["encrypt", "decrypt"]
);
const enc = await crypto.subtle.encrypt(
{
name: "RSA-OAEP"
},
key.publicKey,
data
);
return enc;
};

encData(d1).then(
(enc : ArrayBuffer) => {
alert("Success working on d1");
}
);

encData(d2).then(
(enc : ArrayBuffer) => {
alert("Success working on d2");
}
);

在 Firefox 和 Chrome 中编译和运行上述 TypeScript(通过包含在一个简单的 html 页面中)时,我注意到一个 Uncaught (in promise) DOMException第一个警报后开发者控制台中的错误。

使用 crypto.subtle.encrypt 时有什么我遗漏的地方吗?或错误地使用 RSA-OAEP 算法?

最佳答案

使用公式 modulus size - 2 - 2*hash size ,它适用于 SHA256(32 字节)。似乎您正在应用 SHA1 大小(20 字节)

  • SHA256:256 - 2 - 2*32 = 190
  • SHA1:256 - 2 - 2*20 = 214
  • 关于encryption - 为什么 WebCryptoAPI RSA-OAEP 加密函数无法使用给定 key 大小的预期最大块大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196658/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com