首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyNaCl中的64个字节键

PyNaCl中的64个字节键
EN

Stack Overflow用户
提问于 2019-09-17 12:04:48
回答 1查看 533关注 0票数 1

有没有办法在PyNaCl中使用64个字节键?

我正在使用PyNaCl中的签名函数。我可以用不对称密码技术来签署消息并进行验证它们。据我所知,签名的基本实现使用32个字节键。

现在:我还想使用与我在Python中使用的键在R中签名消息,因此,我使用包。此包使用64个字节键(以及相同的算法)。

是否有一种方法可以让任何一个包使用32或64个字节键,这样我就可以在另一种语言中重用密钥了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-19 09:31:36

好吧。结果,问题是我对签名算法的理解。

PyNaCl库更多地依赖于用于创建私钥的种子。这个种子是32个字节,可以用来代替64个字节键。

钠包使用64字节键,只允许您直接指定该密钥。但不是种子。

因此,我真正想做的是在创建私钥时,保存密钥和种子。用这个键,我可以使用R中的钠包,用种子我可以重建PyNaCl库的密钥。

更新(2020-11-03)

我的特定用法是用Python创建键,然后在Python和R中读取它们,我将演示这种行为。

我发现,如果将PyNaCl实例转换为字节,则SigningKey库将公开该种子,但它仍然将实际签名密钥表示为属性_signing_key

代码语言:javascript
复制
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中,我可以通过以下方式导入密钥:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57973838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档