首页 > 解决方案 > C# 中的 Java 椭圆曲线

问题描述

我在 Java 中得到了这个代码,我需要它在 C# 中。我尝试了 BouncyCastle,但不幸的是,我得到的只是奇怪的长键,它与 java 的键完全不同。任何人都可以帮忙吗?谢谢

ECParameterSpec spec = new ECParameterSpec(
        new EllipticCurve(
                new ECFieldFp(new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951")),
                new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853948"),
                new BigInteger("41058363725152142129326129780047268409114441015993725554835256314039467401291")
        ),
        new ECPoint(
                new BigInteger("48439561293906451759052585252797914202762949526041747995844080717082404635286"),
                new BigInteger("36134250956749795798585127919587881956611106672985015071877198253568414405109")
        ),
        new BigInteger("115792089210356248762697446949407573529996955224135760342422259061068512044369"),
        1
);

KeyPairGenerator instance = KeyPairGenerator.getInstance("EC");
instance.initialize(spec);

KeyPair pair = instance.generateKeyPair();
String key64 = Base64.getEncoder().encodeToString(pair.getPublic().getEncoded());

System.out.println(key64);
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5dhzdRh/cCIeiljo3Ym6qm5mILDI3AeY9F13CNyaBrRatL8CAjlYMuWuc9BKAUAxM2wjl3DO0+rtzj1kn2Muhg==

我尝试过的 C# 代码:

SecureRandom random = new SecureRandom();

BigInteger order = new BigInteger("115792089210356248762697446949407573529996955224135760342422259061068512044369");

FpCurve curve = new FpCurve(
    new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951"),
    new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853948"),
    new BigInteger("41058363725152142129326129780047268409114441015993725554835256314039467401291"),
    order,
    BigInteger.One
);

ECDomainParameters parameters = new ECDomainParameters(
    curve,
    curve.CreatePoint(
        new BigInteger("48439561293906451759052585252797914202762949526041747995844080717082404635286"),
        new BigInteger("36134250956749795798585127919587881956611106672985015071877198253568414405109")
    ),
    order,
    BigInteger.One
);

ECKeyPairGenerator pGen = new ECKeyPairGenerator();
ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(parameters, random);
pGen.Init(genParam);

AsymmetricCipherKeyPair pair = pGen.GenerateKeyPair();
SubjectPublicKeyInfo pki = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
string key64 = Convert.ToBase64String(pki.GetEncoded());
MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAAAAAAAAAAAAAAD///////////////8wRAQg/////wAAAAEAAAAAAAAAAAAAAAD///////////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABJXaEkZrv+wsiqdmBIJ5r3p8pX960GX+OX6RwglN7r3fUdkLSHqDydF6Cn8+8HkrR5tx0AQ0Lo888/fONsQ7Hf4=

如您所见,C# 输出看起来不正确

标签: javac#

解决方案


推荐阅读