java - 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# 输出看起来不正确
解决方案
推荐阅读
- apache-nifi - 如何在多对索引/位置之间的正则表达式中获取数据
- liferay - Liferay PortalUtil.getPlidFromPortletId 不工作
- navigation - CSS 中的标准类名和 ID 名
- javascript - 变量中的响应未正确显示
- javascript - 尝试在 vuejs 中获取我的本地 json 文件时未定义错误“要求”
- c++ - c ++使用char数组创建字符串
- arrays - 任务是编写一个程序,提示用户输入 2 个 2D 数组的大小,然后将它们相乘
- java - 身份核心迁移到 Java
- c++ - 使用类模板需要模板参数列表 c++ Visual Studios
- python - 代码显示类型错误必须是 str,而不是 int