- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是代码:
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"fmt"
)
func main() {
msg := "Any random message"
curve := elliptic.P224()
key, err := ecdsa.GenerateKey(curve, rand.Reader)
if err != nil {
fmt.Println(err)
}
r, s, err := ecdsa.Sign(rand.Reader, key, []byte(msg))
if err != nil {
fmt.Println(err)
}
// fmt.Println("r: ", r)
// fmt.Println("s: ", s)
publicKey := key.Public()
isVerified := ecdsa.Verify(publicKey.(*ecdsa.PublicKey), []byte(msg), r, s)
fmt.Println("isVerified: ", isVerified)
fmt.Println("key.PublicKey: ", key.PublicKey)
fmt.Println("key.D: ", key.D)
fmt.Println("key.Public() : ", publicKey)
fmt.Printf("Type of publicKey: %T\n", publicKey)//*ecdsa.PublicKey
}
为什么调用
ecdsa.Verify()
时需要类型断言在
publicKey
?
publicKey
的类型时,它清楚地表明它是类型
*ecdsa.PublicKey
, 相应函数参数所需的类型,但它被解释为类型
crypto.PublicKey
.
./main.go:25:28: cannot use publicKey (type crypto.PublicKey) as type *ecdsa.PublicKey in argument to ecdsa.Verify: need type assertion
最佳答案
正如您在文档中注意到的那样:
crypto.PublicKey
是一个接口(interface):它包含一个具体的值和一个动态类型。在编译时,类型可以是任何东西,因此必须在运行时检查(类型切换、类型断言)ecdsa.PublicKey
是具体类型 publicKey
可以有动态类型
ecdsa.PublicKey
, 或
rsa.PublicKey
, 甚至
nil
.编译器允许所有这些。
ecdsa.PublicKey
,另一个是是
rsa.PublicKey
)。
crypto.PublicKey
接口(interface)允许轻松传递此 key ,但在实际使用它时,
你必须检查动态类型 .
*ecdsa.PublicKey
使用
%T
打印时动词是
print calls reflect.TypeOf .根据
docs ,这是传入接口(interface)的动态类型(或
nil
)。
关于go - 在函数 ecdsa.Verify 上键入断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63370048/
我需要创建由“根”证书(自签名,ECDSA)签名的“客户端”ECDSA 证书。“根”证书是按照 Translating Elliptic Curve parameters (BC to MS) 中的描
理论上,如果拥有公钥、签名和已签名的数据并且哈希算法已知,则应该可以验证一段数据的签名。 我有二进制格式的所有这些组件。有人知道验证此签名的最简单方法吗?打开SSL? Python?一个例子会很棒。不
我正在使用ECC证书来观察TLS是如何工作的,谁能帮我区分ECDH-ECDSA-AES128-SHA256和 ECDHE-ECDSA-AES128-SHA256 . 使用时ECDHE-ECDSA-AE
我在执行以下操作时遇到问题: 使用 Python 为 ECDSA SECP256k1 曲线创建公私钥对,并将其打印在终端上。 在 Python 脚本和 visual studio(使用 micro-e
我正在尝试生成用于加密芯片的“原始”、未编码的 ECDSA 签名。目标是在主机 pc 上签署某些内容,然后将其发送到芯片进行验证。但是,我遇到了一个小问题。我的理解是 ECDSA 签名应该是 64 个
我需要使用 ECDSA 算法对消息进行签名并在 java 中发送给接收者。然后,接收方应验证发送方的签名。 因此,为此,接收方拥有发送方的公钥,但在通过以下命令将 java.security.Publ
我正在使用创建 key 对 ECDSA::Signer signer; signer.AccessKey().Initialize(randomGeneratorM, ASN1::secp160r1(
我只需要为 ECDSA 获取私钥和公钥对。 Stanford Javascript Crypto Library 以非标准方式 ( https://groups.google.com/forum/
我一直在为以太坊交易管理器编写签名者服务,我需要使用 Google KMS Golang APIs 签署以太坊交易。 .我将在下面尝试总结我面临的问题。 Ethereum 在 R 中需要紧凑的 RLP
我使用以下两行来生成 ECDSA 私钥的十六进制: openssl ecparam -genkey -name secp256k1 -out data.pem openssl ec -in data.
我正在使用 python 和 cryptography.io 来签署和验证消息。我可以通过以下方式获得签名的 DER 编码字节表示: cryptography_priv_key.sign(messag
是否有为 JWK 创建指纹(又名指纹)的标准规范方法? 从我阅读的内容来看,该标准似乎没有定义 kid应该指定,我觉得很奇怪。对我来说,它是最重要的,因为它是一个确定性的值,而不是一个需要查找表的值,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
我想知道ECDSA签名和公钥的数据格式是什么规范(或标准)定义的? 我正在 java 卡上测试 ECDSA 签名。我发现签名和公钥值中有一个TLV格式。 * Public key (TV format
我正在尝试创建一个数字证书,该证书将使用 EC key 而不是来自 RSA 的 key 进行自签名,并遵循这些 SO link1和 link2 。我将 link1 中给出的 RSA 签名算法替换为 E
我正在尝试创建一个数字证书,该证书将使用 EC key 而不是来自 RSA 的 key 进行自签名,并遵循这些 SO link1和 link2 。我将 link1 中给出的 RSA 签名算法替换为 E
以下网站经常被引用,我认为是准确的: https://gobittest.appspot.com/Address 我正在尝试在 Golang 中重现这些步骤,但第一步失败:-( 有人可以向我提供一个
我试图从私钥生成公共(public) ECDSA key ,但我没有在互联网上找到关于如何执行此操作的太多帮助。几乎一切都是为了从公钥规范生成公钥,但我不知道如何获得它。到目前为止,这是我整理的内容:
是否有任何库支持从 javascript(前端)的私钥派生 ecdsa 公钥? (有了私钥,我们就可以生成对应的公钥) 我研究了localethereum white paper ,我想实现加密层。
来自OpenSSL documentation 使用命名曲线 prime256v1(又名 P-256)创建给定 SHA-256 哈希值的 ECDSA 签名。 第二步:使用 ECDSA_do_sign(
我是一名优秀的程序员,十分优秀!