发布于 2019-09-19 09:31:36
好吧。结果,问题是我对签名算法的理解。
PyNaCl库更多地依赖于用于创建私钥的种子。这个种子是32个字节,可以用来代替64个字节键。
钠包使用64字节键,只允许您直接指定该密钥。但不是种子。
因此,我真正想做的是在创建私钥时,保存密钥和种子。用这个键,我可以使用R中的钠包,用种子我可以重建PyNaCl库的密钥。
更新(2020-11-03)
我的特定用法是用Python创建键,然后在Python和R中读取它们,我将演示这种行为。
我发现,如果将PyNaCl实例转换为字节,则SigningKey库将公开该种子,但它仍然将实际签名密钥表示为属性_signing_key。
from nacl.signing import SigningKey
signing_key = SigningKey.generate()
# This gives you the 32 bytes seed
bytes(signing_key)
# This gives you the 64 bytes actual key
signing_key._signing_key(真的,种子和钥匙在这里是可以互换的。如果你有种子,你就能计算出它的密钥。据我所知,它是一个实现细节,它向您公开的是库。使用32字节种子当然更有效,因为您只需要存储32字节而不是64字节。)
然后,我继续保存64字节键以及32字节种子。稍后,我可以使用PyNaCl库在Python中再次导入32字节种子。在R中,我可以通过以下方式导入密钥:
keyFile <- "path/to/the/key"
key.char <- readChar(keyFile, file.info(keyFile)$size)
key <- base64enc::base64decode(key.char)
# Sign messages using this key with the sodium library
sodium::sig_sign(charToRaw("your private message"), key)https://stackoverflow.com/questions/57973838
复制相似问题