gpt4 book ai didi

node.js - NodeJS 加密 RSA,与 Elixir/Erlang PublicKey 不兼容?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:08 25 4
gpt4 key购买 nike

我在尝试使用 NodeJS Crypto 加密的 Elixir(使用 ExCrypto - 它只是 crypto 和 public_key 的包装器)中解密时遇到问题。

这是有效的:

  • NodeJS 中的 encrypt_public -> crypto_private NodeJS(有效)
  • Elixir 中的 encrypt_public -> Elixir 中的 crypto_pricate(作品)

但是:

  • NodeJS 中的 encrypt_public -> Elixir 中的 crypto_private(不起作用)

看来 Node 中的 encrypt_public 无法被 Elixir 中的 crypto_private 解密。我什至直接使用 Erlang 模块 public_key 进行了艰难的尝试,它给了我相同的结果。

这是我尝试过的:

var fs = require("fs")
var crypto = require("crypto")

var rsa_key = fs.readFileSync('./priv/public.key').toString()
var rsa_priv = fs.readFileSync('./priv/private.key').toString()
var buffer = Buffer.from("Hello world")
var encrypted_auth = crypto.publicEncrypt({key: rsa_key}, buffer)
console.log("copy/paste this in iex: ", encrypted_auth.toString("Base64"))
var crypted_buffer = Buffer.from(encrypted_auth)
var decrypted_auth = crypto.privateDecrypt({key: rsa_priv, passphrase: "my_pass_phrase"}, crypted_buffer)
console.log("--- Res: ", decrypted_auth.toString())

但是一旦复制/粘贴 Node 中生成的 Base64,这就是我得到的:

key = ExPublicKey.load!("./priv/private.key", "my_pass_phrase")
cipher = "PASTED BASE64 FROM NODE"
ExPublicKey.decrypt_private(cipher, key)

返回:错误

我怀疑 rsa 填充有所不同,但似乎并非如此......有人知道吗?

最佳答案

有 2 个问题Node 中默认的填充为:RSA_PKCS1_OAEP_PADDING而 erlang 的默认值是:rsa_pkcs1_padding

解决方案是修改Node中的填充:

var encrypted_auth = crypto.publicEncrypt({key: rsa_key, padding: crypto.constants.RSA_PKCS1_PADDING}, buffer)

第二个问题是 EXPublicKey 尝试 Base.url_decode64,而 Node 生成的 Base64 不是 url 安全的要解决这个问题:

ExPublicKey.decrypt_private(cipher, key, url_safe: false)

关于node.js - NodeJS 加密 RSA,与 Elixir/Erlang PublicKey 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56149466/

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