NextJS 加密错误

Bad encrypt with NextJS

提问人:Daniel Acosta 提问时间:11/17/2023 最后编辑:rabbibillclintonDaniel Acosta 更新时间:11/18/2023 访问量:62

问:

我有一个带有 NextJS 的客户端和一个带有 Python 的 API。我尝试使用客户端加密信息并使用 API 对其进行解密。 我有一个带有 NodeJS 的脚本来测试加密,然后我将加密数据粘贴到 Postman 中以测试 API。

这是 NextJS 中使用 NodeJS 的代码。 我向 API 发送加密数据的 base64 字符串。

const publicKey = 'abcdefghijklmnopqrstuvwxyz';

const encryptedData = crypto.publicEncrypt({
    key: Buffer.from(publicKey, 'utf-8'),
    padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
    oaepHash: 'sha256'
}, Buffer.from(data));

const encryptedDataBase64 = encryptedData.toString('base64');
return encryptedDataBase64

使用 Python,我获取 base64 字符串,然后解密数据。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

encrypted_data = base64.b64decode(b64data)

with open('./secure/private_key.pem', 'rb') as key_file:
    private_key = serialization.load_pem_private_key(
        key_file.read(),
        password=None,
        backend=default_backend()
    )

decrypted_data_bytes = private_key.decrypt(
    encrypted_data,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

decrypted_data = decrypted_data_bytes.decode('utf-8')

return decrypted_data

我试过用以下方法加密数据:

  • NextJS,然后通过 Postman 发送数据
  • NodeJS,然后通过 Postman 发送数据
  • NodeJS,然后将数据粘贴到 NextJS 中,然后向 API 发出请求。

这些都无法在 API 中正确解密。问题在于在NextJS中对数据进行加密时。

Python 下一个 .js 加密

评论

0赞 rabbibillclinton 11/17/2023
我不认为问题与NextJS有关。NextJS 充当代码的前端,并允许用户访问 API。您在 NextJS 中加密的任何数据都使用 NodeJS 中的库对其进行加密。除非你使用两个不同的库,一个在 NextJS 中,一个在单独的 Node 应用程序中,否则前端应该无关紧要。
0赞 rabbibillclinton 11/17/2023
你能从第一个代码块中发布完整的功能吗?它似乎根据输入变量返回一个字符串,并且查看完整函数以弄清楚如何解密返回的数据会很有用。data
2赞 Topaco 11/17/2023
对于失败的情况,您是否检查过 NextJS 端和 Python 端是否完全相等(以排除数据损坏)?私钥和公钥是否关联,即它们是否属于同一密钥对?encryptedDataBase64b64data

答: 暂无答案