掙扎無數小時後,我終於有當前工作的代碼來生成CMS籠罩(RSA-OAEP/PKCS#1)使用JCE/JCA收件人信息數據:如何使用BouncyCastle的lightwigth API生成CMS封裝數據
String digest = "SHA-256";
String mgfDigest = "SHA-256";
// Data to encrypt
CMSTypedData msg = new CMSProcessableByteArray(data);
// Generator for my CMS enveloped data
CMSEnvelopedDataGenerator envelopedDataGen = new CMSEnvelopedDataGenerator();
// Recipient Info Stuff
JcaAlgorithmParametersConverter paramsConverter = new JcaAlgorithmParametersConverter();
OAEPParameterSpec oaepSpec = new OAEPParameterSpec(digest, "MGF1", new MGF1ParameterSpec(mgfDigest), PSource.PSpecified.DEFAULT);
AlgorithmIdentifier oaepAlgId = paramsConverter.getAlgorithmIdentifier(PKCSObjectIdentifiers.id_RSAES_OAEP, oaepSpec);
envelopedDataGen.addRecipientInfoGenerator(
new JceKeyTransRecipientInfoGenerator(
getCert(),
oaepAlgId).setProvider("BC"));
/*
* Generate CMS-Data
* CMSOutputEncryptor is my own Class implementing OutputEncryptor
*/
CMSEnvelopedData ed = envelopedDataGen.generate(
msg,
new CMSOutputEncryptor());
byte[] encoded = ed.getEncoded();
這可以按預期工作,但由於它使用JCE,我的客戶需要安裝無限強度api才能使用此代碼。我寧願一種方法來克服這些需求,因爲我的大多數客戶的手指是拇指...
也許有人可以告訴我一段代碼,它使用純粹的BouncyCastle方式做同樣的事情,以便一個人不需要安裝無限強度api?
感謝這段代碼,但AFAIK這將不再工作,因爲靜態字段終於現在。請查看https://github.com/jruby/jruby/issues/4101。最後,我決定發佈一個完整的java jre,並啓用無限強度api。但很高興知道我的代碼對你有幫助。 –
此行將修改器設置爲非最終: modifiers.setInt(isRestricted,isRestricted.getModifiers()&〜Modifier.FINAL); – Juraj