C# ecdsa 签名 - 我可以选择哪种 key 规范?

标签 c# java android ecdsa

我需要在 C# 端生成 ECDSA 签名,并在使用(显然)相关公钥读取并验证 Android 应用程序上的签名后。 好吧,要在java中获取ECDSA key 对(使用bouncy caSTLe提供程序),代码如下

kpg = KeyPairGenerator.getInstance("ECDSA", "BC");
            ecSpec = new ECGenParameterSpec("secp224k1");
kpg.initialize(ecSpec, new SecureRandom());

字符串“secp224k1”是曲线名称。我可以选择“secp224k1”、“secp224r1”、“secp256k1”、“secp256r1”等。

我的问题是:

  1. 上面提到的 C# 中的等效曲线名称是什么?
  2. 有人能给我举一个例子,说明如何在 C# 中生成像上面的 java 代码一样的 key 对吗?

提前致谢

最佳答案

我发现了一些关于我的第一个问题的信息:

Which is the equivalent curve name in C# mentioned above?

微软库仅支持 P-256、P-384 和 P-521“NIST 推荐的椭圆曲线 ID”,即“SEC 2 推荐的椭圆曲线域”的等效命名曲线,分别为 secp256r1、secp384r1、secp521r1参数”,相当于 prime256v1,但不是 ANSI X9.62 ECDSA 素数曲线 ID 中的 384 和 521。 C# 的 Bouncy caSTLe 库,支持更多其他曲线,例如我感兴趣的 secp224k1。

对于第二个问题

Could somebody make me an example about how, in C#, i can generate a keyPair like the above java code?

我找到了一个旧的例子here 它说支持的 key 只有 3 个:192 位、239 位和 256 位,但我认为是指某些旧版本的库

这段代码可以演示它

ECKeyPairGenerator gen = new ECKeyPairGenerator("ECDSA");
        SecureRandom secureRandom = new SecureRandom();
        Org.BouncyCastle.Asn1.X9.X9ECParameters ecp = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp224k1");
        ECDomainParameters ecSpec = new ECDomainParameters(ecp.Curve, ecp.G, ecp.N, ecp.H, ecp.GetSeed());
        ECKeyGenerationParameters ecgp = new ECKeyGenerationParameters(ecSpec, secureRandom);
        gen.Init(ecgp);
        AsymmetricCipherKeyPair eckp = gen.GenerateKeyPair();

如果有人想尝试让它变得更好,我认为这篇文章对所有人来说都是非常宝贵的。我只是 C# 的初学者,这段代码不是我的。 :)

关于C# ecdsa 签名 - 我可以选择哪种 key 规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19466907/

相关文章:

java - J2ME LWUIT 选项卡 Pane : How to add mutliple components in a tab?

java - java、linux开发机苹果推送通知服务

Android 应用发布 keystore 密码

c# - SQL Server 存储过程提示缺少参数,但正在设置

c# - 如何告诉 unit ms test 从子文件夹而不是 root 中获取 CSV 文件?

c# - 在 Protobuf-net 中装饰中级类

c# - FilePathResult 下载进度 MVC

java - 验证以查看表单是否已更改

java - 微调器选择的项目使用数据库 android 打开新的数组列表

Android 单元测试给出了错误的结果