簡體   English   中英

使用 SpongyCastle 以 PKCS#7 格式簽署數據

[英]Sign data in PKCS#7 format using SpongyCastle

我正在嘗試在 Android 中使用 SpongyCastle(使用這些依賴"com.madgag.spongycastle:core:1.58.0.0""com.madgag.spongycastle:pkix:1.54.0.0" )以 PKCS#7 格式簽署字符串。

這是我的密鑰對生成代碼:

   KeyPairGenerator keyPairGenerator;
    try {
        Calendar start = GregorianCalendar.getInstance();
        Calendar end = GregorianCalendar.getInstance();
        end.add(Calendar.YEAR, 10);
        keyPairGenerator = KeyPairGenerator.getInstance("RSA", ANDROID_KEY_STORE);
        keyPairGenerator.initialize(new KeyPairGeneratorSpec.Builder(context)
                .setAlias(ALIAS)
                .setSerialNumber(BigInteger.valueOf(1))
                .setStartDate(start.getTime())
                .setEndDate(end.getTime())
                .setSubject(new X500Principal(""))
                .build());
        keyPairGenerator.generateKeyPair();
    } catch (Exception e) {
        try {
            throw e;
        } catch (InvalidAlgorithmParameterException ex) {
            ex.printStackTrace();
        } catch (NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        } catch (NoSuchProviderException ex) {
            ex.printStackTrace();
        }
    }

並從此處提供的解決方案復制簽名代碼:

 CMSSignedDataGenerator setUpProvider(final KeyStore keystore) throws Exception {

    Security.addProvider(new BouncyCastleProvider());

    Certificate[] certchain = keystore.getCertificateChain(ALIAS);

    final List<Certificate> certlist = new ArrayList<>();

    for (int i = 0, length = certchain == null ? 0 : certchain.length; i < length; i++) {
        certlist.add(certchain[i]);
    }

    Store certstore = new JcaCertStore(certlist);

    Certificate cert = keystore.getCertificate(ALIAS);

    ContentSigner signer = new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC").
            build((PrivateKey) (keystore.getKey(ALIAS, null)));

    CMSSignedDataGenerator generator = new CMSSignedDataGenerator();

    generator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC").
            build()).build(signer, (X509Certificate) cert));

    generator.addCertificates(certstore);

    return generator;
}

但我越來越cannot create signer: no such algorithm: SHA1WITHRSA for provider BC異常。 任何提示或sloutions?

無需setProvider("BC") JcaContentSignerBuilderJcaDigestCalculatorProviderBuilder中刪除setProvider("BC")后它不會崩潰

暫無
暫無

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

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