如何在JavaScript中的RSA-OAEP算法中使用publicExponent作为65537?

rak*_*esh 3 javascript encryption rsa padding

实际上,我使用 RSA-OAEP 和 SHA-256ANDMGF1PADDING 使用 Web 加密 API 在 JavaScript 中进行加密和解密。我需要做的实际场景是在java中我能够使用具有相同算法规范的公钥和私钥进行加密和解密。但它使用了 65537 公共指数。现在我需要做的是使用公钥在 JavaScript 中加密一些消息并在 java 中解密它。但我发现在JavaScript中,对于上述算法规范,它使用公共指数为5。所以我想将其更改为65537。我尝试在JavaScript中使用以下代码。

  window.crypto.subtle.generateKey({
     name: "RSA-OAEP",
     modulusLength: 2048,
     publicExponent: new Uint8Array([0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x01]),
     hash: {name: "SHA-256"},
    }, 
true, 
 ["encrypt", "decrypt"]);
Run Code Online (Sandbox Code Playgroud)

但生成的公钥的公共指数仍然是 5。我做错了什么?我的最终要求是,使用 RSA-OAEP 和 SHA-256ANDMGF1PADDING 在 JavaScript 中加密一些消息,并且能够使用私钥在 java 中解密,反之亦然。

ped*_*ofb 5

用这个。它相当于 65537:

 publicExponent: new Uint8Array([0x01, 0x00, 0x01])
Run Code Online (Sandbox Code Playgroud)

publicExponent一个BigInteger uint8 数组中的每个元素都是 0..256 范围内的非负整数

  1. 大整数
typedef Uint8Array BigInteger;
Run Code Online (Sandbox Code Playgroud)

BigInteger typedef 是一个 Uint8Array,它以大端顺序保存任意大小的无符号整数。

[0x01, 0x00, 0x01] = 00000001 00000000 00000001 = 65537
Run Code Online (Sandbox Code Playgroud)