这个问题与这里现有的问题相反: Encrypt in python 3.7 and decode in NODEJS 12。
我更愿意在 python 上使用与tweet-nacl完全相同的东西,但该项目说它很旧,不推荐使用https://github.com/warner/python-tweetnacl。他们推荐的替代品是https://github.com/pyca/pynacl:但是那个是libsodium的接口而不是tweet-nacl,并且没有关于如何实现解密的明确文档。
这是JS加密:
let msgArr = naclutil.decodeUTF8(jprint(msg))
let nonce = nacl.randomBytes(nacl.box.nonceLength)
let keyPair = this.genKeyPair()
let encrypted = nacl.box(
msgArr,
nonce,
naclutil.decodeBase64(pubKey),
naclutil.decodeBase64(keyPair.privkey)
)
let nonce64 = naclutil.encodeBase64(nonce)
let encrypted64 = naclutil.encodeBase64(encrypted)
(工作的) tweet-nacl javascript 解密代码是:
const decryptedMessage = nacl.box.open(
naclutil.decodeBase64(payload.encrypted.encrypted),
naclutil.decodeBase64(payload.encrypted.nonce),
naclutil.decodeBase64(payload.encrypted.ephemPubKey),
naclutil.decodeBase64(privKey)
)
const decodedMessage = naclutil.encodeUTF8(decryptedMessage)
我的问题是,因为pynacl
他们没有显示任何使用ephemPubKey进行解密的示例。我能找到的例子如下:
import binascii
from nacl.encoding import HexEncoder
from nacl.exceptions import CryptoError
from nacl.secret import Aead, SecretBox
benc= binascii.unhexlify(encrypted)
bnonce = binascii.unhexlify(nonce)
box = SecretBox(privKey, encoder=HexEncoder)
decrypted = box.decrypt(benc, bnonce, encoder=HexEncoder),
有没有人能够将 tweet-nacl Javascript 生成的加密成功解密成 python?