这个问题与这里的现有问题相反: Encrypt in python 3.7 and decode in NODEJS 12
我更愿意在python上使用与tweet完全相同的nacl,但该项目表示它很旧,不推荐使用。他们推荐的替代品是https://github.com/pyca/pynacl:但这一个是libnail而不是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)
(工作)tweetjavascript解密代码是:
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和Javascript生成的加密解密到python中
SecretBox
因此,您发布的PyNaCl示例适用于对称加密,shere。您可以找到使用PyNaClhere加密的公钥文档和PyNaCl的一般文档here在下面的示例中,明文使用TweetNaCl.js加密,并使用PyNaCl解密
JavaScript端-使用TweetNaCl.js进行加密:
代码基本上与您的代码相同,不同之处在于键不是生成的,而是导入的
Python端-使用PyNaCl解密:
在上面的示例中,已导入密钥。如果需要生成密钥对,可使用PyNaCl按如下方式完成:
关于兼容性:
js和PyNaCl是兼容的。正如您所描述的,虽然PyNaCl是Python(s.here和here)的libNaCl的包装器,但libNaCl本身是NaCl(s.here)的端口,JavaScript(here)的TweetNacl.js也是如此。
因此,TweetNaCl和PyNaCl最终都是基于NaCl,Bernstein等人实现的原始库here,因此是兼容的(也许除了一些小的语法差异)
相关问题 更多 >
编程相关推荐