当前位置: 首页 > 面试题库 >

C#ecdsa签名-我可以选择哪个密钥规范?

戚宏浚
2023-03-14
问题内容

我需要在C#端生成ECDSA签名,并在使用(显然)相对公钥读取并验证android应用程序上的签名后。好吧,要在Java中获得ECDSA密钥对(使用充气城堡提供程序),代码是这样的

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

字符串"secp224k1",是曲线名称。我可以选择“ secp224k1”,“ secp224r1”,“ secp256k1”,“
secp256r1”和其他更多内容。

我的问题是:

  1. 上面提到的C#中的等效曲线名称是什么?
  2. 有人可以给我一个例子,说明如何在C#中生成上面的Java代码这样的keyPair吗?

提前致谢


问题答案:

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

上面提到的C#中的等效曲线名称是什么?

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

对于第二个问题

有人可以给我一个例子,说明如何在C#中生成上面的Java代码这样的keyPair吗?

我在这里找到了一个旧示例,
它说支持的密钥只有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#中的等价曲线名? 有人能给我举一个例子,说明如何在C#中生成一个类似于上面java代码的keyPair吗? 提前致谢

  • 我试图使用javascript创建ECDSA算法的密钥对,签名消息,然后在服务器端验证它(使用Java)。 示例javascript代码: 例如: 我做错了什么?

  • 要使用OpenSSL生成私钥和公钥,我已经运行 我将公钥上传到远程服务器。然后将导入。Net Framework(它必须是。Net Framework)C#服务使用它来签署API有效负载: 用上面的代码给出 如果我使用并运行它会生成一个名为的PKCS#12密钥,然后: 使用<code>privateKeyFile=private-key.pem。p12上面的代码似乎对请求进行了签名,但API响应为

  • 我已经在Java中生成了一个ECDSA签名,我希望从中获得R和S值,以便获得COSE编码的签名。根据我的理解,我生成的签名是DER编码的(默认情况下使用bouncyCastle)。当我使用P-256曲线(SHA256withECDSA)时,我正确地检索了R和S值。 当我使用其他曲线(P-521、P-384)时,从一种编码到另一种编码的签名解析有一些问题。

  • 我是Openssl的新手,我已经生成了私钥myprivatekey。pem和公钥mypublickey。pem与: 和我的公钥: 接下来我想做的是用通行短语私钥加密我的ecdsa,并对我的公钥进行认证请求,感谢大家的帮助。

  • 我对密码学很陌生,我正试图用C#.NET在Windows上对其进行分类 我使用以下命令生成了一个椭圆曲线 P-256(又名 secp256r1 和 prime256v1)键: 我使用以下命令生成了证书签名请求: 另一个团队发给我一个base-64编码的证书作为回应。到目前为止一切顺利。 现在,我收到了一些“测试”数据,需要使用私钥计算ECDSA签名。私钥看起来像: 到目前为止,我一直在努力编写类似