我需要在C#端生成ECDSA签名,并在使用(显然)相对公钥读取并验证Android应用程序上的签名。 好吧,要在java中获得ECDSA密钥对(使用充气城堡提供商),代码就像那样
kpg = KeyPairGenerator.getInstance("ECDSA", "BC");
ecSpec = new ECGenParameterSpec("secp224k1");
kpg.initialize(ecSpec, new SecureRandom());
字符串"secp224k1"
是曲线名称。我可以选择“secp224k1”,“secp224r1”,“secp256k1”,“secp256r1”等等。
我的问题是:
提前致谢
答案 0 :(得分:2)
我发现了第一个问题:
上面提到的C#中的等效曲线名称是什么?
微软库仅支持P-256,P-384和P-521“NIST推荐的椭圆曲线ID”,即“SEC 2推荐的椭圆曲线域”的等效命名曲线,即secp256r1,secp384r1,secp521r1参数“相当于prime256v1,但不是ANSI X9.62 ECDSA主曲线ID中的384和521。 C#的充气城堡库支持更多其他曲线,如我感兴趣的secp224k1。
关于第二个问题
有人可以让我举个例子,在C#中,我可以像上面的java代码一样生成keyPair吗?
我找到了一个旧例子here 它说支持的密钥只有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#的初学者,这个代码不是我的。 :)