簡體   English   中英

使用crypto++時如何讀取從java bouncycastle生成的ECC公鑰

[英]how to read an ECC public key which had been generated from java bouncycastle when using crypto++

我使用以下代碼從 bouncycastle 創建了一個 ECC 公鑰:

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC");
keyPairGenerator.initialize(256, new SecureRandom());

KeyPair kp = keyPairGenerator.generateKeyPair();

PublicKey publicKey = kp.getPublic();
PrivateKey privateKey = kp.getPrivate();

String serverPublicKey = Base64.getEncoder().encodeToString(publicKey.getEncoded());

然后我復制公鑰並在 iOS 中使用以下代碼閱讀:

NSString *publicKey = @"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWPSEiXPN274aQi0FyG39w05HUu/fVOMlH56SGvCGWRoQ0IcFxJTxBziTHLJ+OC3o+yl7P8h0oz/ChL15hfMbWA==";

StringSource ss(publicKey.UTF8String, true, new CryptoPP::Base64Decoder);

CryptoPP::ECIES<CryptoPP::ECP>::Encryptor encrypto;
encrypto.AccessKey().AccessGroupParameters().Initialize(ASN1::secp256r1());

//get point on the used curve
ECP::Point point;
encrypto.GetKey().GetGroupParameters().GetCurve().DecodePoint(point, ss7, (size_t)ss.MaxRetrievable());

cout << "X: " << std::hex << point.x << endl;
cout << "Y: " << std::hex << point.y << endl;

//set encryptor's public element
encrypto.AccessKey().SetPublicElement(point);

//check whether the encryptor's access key thus formed is valid or not
encrypto.AccessKey().ThrowIfInvalid(prng, 3);
PrintPublicKey(encrypto.GetKey());

我收到錯誤

libc++abi.dylib:以未捕獲的 CryptoPP::CryptoMaterial::InvalidMaterial 類型異常終止:CryptoMaterial:此對象包含無效值

有人可以幫我解決這個問題嗎?

您應該使用ECGenParameterSpec

private KeyPair generateEcKeyPair() throws InvalidAlgorithmParameterException,
      NoSuchProviderException, NoSuchAlgorithmException {

    KeyPairGenerator kpgen = KeyPairGenerator.getInstance("EC", "BC");
    ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
    kpgen.initialize(spec, new SecureRandom());
    return kpgen.generateKeyPair();
  }

那么你的公鑰是generateEcKeyPair().getPublic()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM