我试图写一个小程序,将签署电子邮件与S / MIME。

显然,我想使一个小罐子,只有需要的东西。 显然,这样做的Java的方式包括周围有一个巨大的神圣签署充气城堡JCE罐子。

现在的问题是:什么是让S / MIME而不触及JCE并让它抱怨“认证”,“供应商”的最简单的方法?也许有一个S / MIME实现,它不依赖于JCE?也许是可以使用充气城堡S / MIME使用他们的API轻巧而不触及JCE?也许有任何其他方式?

很明显,我认为没有什么可以阻止一个纯Java的开源加密算法从不管太阳是否批准工作,所以它不是理论上的可能性问题,而是:哪种方式是最痛苦的。

当然,我可以随时去丑年初抓住充气城堡纯Java JCE实现,重命名其包java.security1,并使我想任何改变 - 不过这样看起来太痛苦了,现在

更新的我现在的问题直接使用充气城堡:我尝试加载从密钥库,其中包括使用SecretKeyFactory,这反过来又拒绝我的充气城堡建键

有帮助吗?

解决方案 2

这是非常简单的,而无需使用JCE签署消息。 真正的问题是读PKCS#12密钥。

我这样做:  *复制JDKPKCS12KeyStore级以上。  *在到处它,取而代之Security.getInstance()与bcProvider.getService()。的newInstance()(返回SPI-S)  *在这些SPI-S(在BC源)制成所需的方法的公开,而不是保护。

它看起来像一个黑客,但似乎实际工作。

其他提示

BC S / MIME被写入在CMS包,所以真正的问题转予给,这样所有的加密是使用重量轻的类进行修改CMS包。

相似的已经做了,更多或更少的成功,对充气城堡的.NET版本的东西。我们正在努力(当然这是一个缓慢的过程)重构的Java版本,因此CMS东西可与JCE或轻工作。同样的问题也影响了BC API的其他部分也如在PKCS#12密钥存储内置于JCE提供者,以OpenPGP包被写入到JCE等这些的.NET端口它们重写到重量轻的API也

您的问题可能比不过一般的情况下简单。想必你只需要CMSSignedDataGenerator和支持类。你可能不需要addSigner的所有无数的变化或产生。如果你只是在你的摘要决定/签名算法前面,那么所有的供应商的东西会很容易与硬编码调用特定的轻量级的实现来代替。

而不是一个密钥的,也许你可以只存储在PKCS#8文件(PEM编码也许是)一个私钥脱身。类似地,对于该证书。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top