【发布时间】:2023-11-29 16:35:01
【问题描述】:
我对密码学真的很陌生,但是 - 我想做的是从公钥的字节数组表示中获取 X 和 Y 坐标。我正在使用 secp256r1 曲线。
// get curve
X9ECParameters x9 = ECNamedCurveTable.GetByName("secp256r1");
ECCurve curve = x9.Curve;
// get coordinates from ASN.1 encoded public key point
var asn1 = (Asn1Sequence)Asn1Object.FromByteArray(publicKeyBytes);
var at1 = (DerBitString)asn1[1];
var bytes = at1.GetBytes();
var x = bytes.Skip(1).Take(32).Reverse().ToArray();
var y = bytes.Skip(33).Take(32).Reverse().ToArray();
// get affine X and Y using point on curve from X and Y
var ecPoint = curve.CreatePoint(new Org.BouncyCastle.Math.BigInteger(1, x), new Org.BouncyCastle.Math.BigInteger(1, y));
ECDomainParameters dParams = new ECDomainParameters(curve, ecPoint, x9.N);
ECPublicKeyParameters pubKey = new ECPublicKeyParameters(ecPoint, dParams);
var affineX = pubKey.Q.AffineXCoord.ToBigInteger().ToByteArrayUnsigned();
var affineY = pubKey.Q.AffineYCoord.ToBigInteger().ToByteArrayUnsigned();
// return a tuple of the coordinates
return (affineX, affineY);
我收到 X 和 Y 坐标,但这些坐标可能不正确。我究竟做错了什么?谢谢
【问题讨论】:
-
你的 X 和 Y 坐标有什么问题?
标签: c# android xamarin bouncycastle elliptic-curve