【问题标题】:Corda - Decoding Base58 public keys doesn't workCorda - 解码 Base58 公钥不起作用
【发布时间】:2020-10-05 21:32:45
【问题描述】:

将 Base58 公钥解码回 PublicKey 实例似乎不起作用:

parsePublicKeyBase58("DLG9nscvKPbgagoLP7jr4oc5FygazKr7pdADZMGFizmpV8")

线程 "main" java.lang.IllegalArgumentException 中的异常:无法从字节 [] 构造序列:遇到未知标签 9 在 org.bouncycastle.asn1.ASN1Sequence.getInstance(未知来源) 在 org.bouncycastle.asn1.x509.SubjectPublicKeyInfo.getInstance(未知来源) 在 net.corda.core.crypto.Crypto.decodePublicKey(Crypto.kt:343) 在 net.corda.core.utilities.EncodingUtils.parsePublicKeyBase58(EncodingUtils.kt:81) 在 test.Program$Companion.main(Program.kt:15) 在 test.Program.main(Program.kt)

这里有什么问题?

你遇到了什么错误 - Sneha Damle?

parsePublicKeyBase58("G9nscvKPbgagoLP7jr4oc5FygazKr7pdADZMGFizmpV8")

线程“main”java.lang.IllegalArgumentException 中的异常:无法从 byte[] 构造序列:DEF 长度 31 对象被 1 截断 在 org.bouncycastle.asn1.ASN1Sequence.getInstance(未知来源) 在 org.bouncycastle.asn1.x509.SubjectPublicKeyInfo.getInstance(未知来源) 在 net.corda.core.crypto.Crypto.decodePublicKey(Crypto.kt:343) 在 net.corda.core.utilities.EncodingUtils.parsePublicKeyBase58(EncodingUtils.kt:81) 在 test.ProgramKt.main(Program.kt:6)

【问题讨论】:

  • 能否在解析前去掉“DL”前缀再试一次?
  • @SnehaDamle 我也试过了。不同的错误,但它仍然没有工作。
  • 你遇到了什么错误
  • @SnehaDamle 查看更新。
  • 什么是parsePublicKeyBase58?这是椭圆曲线公钥吗?密钥编码在哪里?

标签: bouncycastle corda public-key


【解决方案1】:

您可能使用了不正确的 Base58 字符串。我做了以下,它的工作。

将公钥编码为 Base58

Base58.encode(party.getOwningKey().getEncoded()).toString();

这给了我字符串GfHq2tTVk9z4eXgyH7WThpV3Qn7zdCm4cKw8J5x8kVGnVkGtgAmh3KKE7EN4

解码:

PublicKey publicKey = EncodingUtils.parsePublicKeyBase58("GfHq2tTVk9z4eXgyH7WThpV3Qn7zdCm4cKw8J5x8kVGnVkGtgAmh3KKE7EN4");

【讨论】:

  • 谢谢。如果是这样的话,输出一个你不能做任何事情的公钥字符串有什么意义呢?
  • 注意——这些键是调用AnonymousParty.toString()的结果
  • toString() 方法返回一个 SHA256 表示的字符串,我不确定这样做的目的是什么。我还发现我们在 EncodingUtils.toBase58String() 中有一个方法,您可以使用它方便地将公钥转换为其 base58 表示形式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 2021-07-19
  • 2017-08-04
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
相关资源
最近更新 更多