C#如何从字节流中获取X509 PublicKey

时间:2016-10-01 20:04:05

标签: java c# .net crypt

尝试使用此代码从字节流中获取X509 PublicKey。

[Fact]
public void CreatePublicKeyParameters__ShouldReturnPublicKey__WhenPassPublicKeyBytes()
{
    ApplePay applePay = new ApplePay(new MOBSHOPApplePayRequest());
    byte[] privateKey = Base64.Decode("MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjyo3fzxT7j+CFxC7I4B5iVee2FUyn2vfOSjcgp2/g6qhRANCAARdoBFEtnuapXFKw4DYWsW0yV4bavpdWKszkefi19AhlIRE3WSNWSn25W5tZNFjMWtLISBmqANyufx2xP19oRvy");
    var publickey = applePay.CreatePublicKeyParameters(privateKey);
}

public AsymmetricKeyParameter CreatePublicKeyParameters(byte[] ephemeralPublicKeyBytes)
{
      return (ECPublicKeyParameters)PublicKeyFactory.CreateKey(ephemeralPublicKeyBytes);
}

获得以下错误

Bad sequence size: 3
Parameter name: seq

BouncyCastle.Crypto

at Org.BouncyCastle.Asn1.X509.SubjectPublicKeyInfo..ctor(Asn1Sequence seq)
at Org.BouncyCastle.Asn1.X509.SubjectPublicKeyInfo.GetInstance(Object obj)
at Org.BouncyCastle.Security.PublicKeyFactory.CreateKey(Byte[] keyInfoData)

基本上,我尝试将此JAVA代码转换为C#

public ECPublicKey CreatePublicKeyParameters(byte[] ephemeralPublicKeyBytes)
    {
    KeyFactory keyFactory = KeyFactory.getInstance( "ECDH", "BC" );
    X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec( ephemeralPublicKeyBytes );
    ECPublicKey ephemeralPublicKey = (ECPublicKey) keyFactory.generatePublic( encodedKeySpec );
    return ECPublicKey
    }

请帮帮我。

1 个答案:

答案 0 :(得分:0)

抱歉,测试输入数据是错误的。它正在使用下面的测试用例。

 [Fact]
        public void CreatePublicKeyParameters__ShouldReturnPublicKey__WhenPassPublicKeyBytes()
        {

            ApplePay applePay = new ApplePay(new MOBSHOPApplePayRequest());
            byte[] privateKey = Base64.Decode(
                "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl/XAbOgrSCupps/QbIxJ3u4QZ1PlbO5uGDD1zj/JGMoephYSEgw+63gHQHekx3T8duXN3CoYafUpuQlwOeK6/w==");
            var publickey = applePay.CreatePublicKeyParameters(privateKey);
        }

由于