繁体   English   中英

如何使用 static 字符串作为私钥来签署消息?

[英]How to use static string as of private key to sign the message?

我正在使用crypto package 使用以下代码对数据进行签名。 package 中的 DSA 是ed25519 在这段代码中,我想使用由其他服务(节点 js)生成的 static 私钥到代码中提到的符号 function 中。我已经尝试过了,但显示了错误

cannot convert "3ef8cc42c5c5ed0f7a11ef2045da509ed175074223c6ee1a6acc71c15b2a8a8a" (untyped string constant) to [64]byte

代码

package main

import (
    "log"

    crypto "golang.org/x/crypto/nacl/sign"
)

func main() {

    signedData := crypto.Sign(nil, []byte("hello"), *[64]byte("3ef8cc42c5c5ed0f7a11ef2045da509ed175074223c6ee1a6acc71c15b2a8a8a"))
    log.Println(string(signedData))
    log.Println(signedData)

}

任何人都可以帮助我吗? 图书馆链接

您的密钥(十六进制解码)只有 32 个字节并且只是种子,您必须 append 32 个字节的公钥,s。 这里

3ef8cc42c5c5ed0f7a11ef2045da509ed175074223c6ee1a6acc71c15b2a8a8ae2f5b5f7c272360a8292b796c1dc28e8b15f415c9c3680bcae927dda3458261b

和十六进制解码完整的密钥。 全面的:

import (
    "encoding/hex"
    "log"
    crypto "golang.org/x/crypto/nacl/sign"
)

func main() {

    decoded, _ := hex.DecodeString("3ef8cc42c5c5ed0f7a11ef2045da509ed175074223c6ee1a6acc71c15b2a8a8ae2f5b5f7c272360a8292b796c1dc28e8b15f415c9c3680bcae927dda3458261b")
    var key [64]byte
    copy(key[:], decoded)
    signedData := crypto.Sign(nil, []byte("hello"), &key)
    log.Println(string(signedData))
    log.Println(hex.EncodeToString(signedData))
}

该代码给出了十六进制编码的签名:

560f119fd68a647eb9ff10fa83fff71713e377d041c7b076873bed767ed15bae74ff7822764636bfadc2afc4f430e93f32df6c7ba8b904f6055fc9b32fe85f0268656c6c6f

附有消息68656c6c6f的位置。


例如,您可以使用此在线工具并为相同的密钥和相同的消息生成签名。 由于 Ed25519 是确定性的,因此始终为相同的输入数据生成相同的签名。 测试显示两个签名匹配,所以上面的代码测试成功。
请注意,该工具不会 append 消息,它使用 Base64 编码数据作为密钥和签名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM