- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想制作一个 Java 应用程序来制作签名,但遇到了无限强度策略文件的问题, 在许多帖子中讨论过,例如How to avoid installing "Unlimited Strength" JCE policy files when deploying an application?
当然,当我切换策略文件时一切正常,但我宁愿避免这种情况,因为我不打算使用对称加密,所以我猜这是可能的。我的问题是我已经在 KeyStore 的加载方法中得到非法 key 大小异常。
我的问题:
1) 我能否对 keystore 中的内部加密做任何事情,以便 key 大小限制不需要用户更改策略文件?
2) 我了解到 BouncyCaSTLe Lightweight API 可能是一个选项。如果是这样,我如何使用该 API 加载 keystore ?
Security.addProvider(new BouncyCastleProvider());
//Get private key
KeyStore keyStore = KeyStore.getInstance("PKCS12","BC");
String pwd = "password";
FileInputStream finJKS = new FileInputStream("C:\\TEMP\\host.p12");
keyStore.load(finJKS,pwd.toCharArray());
运行: java.io.IOException: 异常解密数据 - java.security.InvalidKeyException: Illegal key size
在 Windows 上的 Netbeans 7.4 上的 JDK 7u51 中运行 jre。
最好的问候
最佳答案
尽管使用了 BouncyCaSTLe,您的代码片段仍会抛出 InvalidKeyException,因为您没有使用 BC Lightweight API。如果您通过 JCE API 访问 BC,那么与 Sun/Oracle 供应商一样,加密强度的限制同样适用。
PKCS#12文件通常使用3DES加密(pbeWithSHA1And3-KeyTripleDES-CBC
),不受默认策略文件的限制。但是,PKCS#12 允许使用任意加密算法,因此您似乎得到了一个用另一种算法加密的 p12 文件。您可以使用 openssl 进行检查:
openssl pkcs12 -in host.p12 -info -noout
当您使用 keytool 将 keystore 转换为 JKS 或 JCEKS(更安全)时,加密算法应该会发生变化:
keytool -importkeystore -srckeystore host.p12 -srcstoretype PKCS12 -deststoretype JCEKS -destkeystore host.jks
当然你必须调整你的代码:
KeyStore keyStore = KeyStore.getInstance("JCEKS");
您甚至可以使用 key 工具将 JCEKS keystore 转换回 PKCS12。 Keytool 使用 pbeWithSHA1And3-KeyTripleDES-CBC
生成 PKCS12 文件。
关于java - 不想使用无限强度策略文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897824/
我的应用程序中有一个 IList 站点,并且站点有大量属性。 我想将此列表转换为 JSON,以便在类似于此的下拉列表中使用 var sites = SiteRepository.FindAll
我正在将一些代码从 bluebird 切换到原生 Promises,并且我对原生 promises 吞下错误这一事实感到相当恼火,即使没有定义 .catch() 也是如此。它使调试变得不可能,除非您在
在同步访问共享资源时,是否有理由不使用读/写锁而不是普通的互斥锁(基本上只是写锁),除了它具有比我可能需要的更多功能的哲学原因? 换句话说,如果我只是默认使用读/写锁作为我首选的同步结构,我是不是在踢
我刚进入这个元素,代码已经写好了,但我们发现了一个问题。当您单击菜单中的任何位置时,它会变成金色,您看不到菜单该部分中的任何链接。您可以再次单击它,它将返回到正常状态。这只发生在 Internet E
这是一个简单的类和简单的测试函数: #include #include namespace { using namespace std; } class NameStream {
我有一个 std::vector其中 Foo是一个包含 Foo( Foo&& ) noexcept 的类. 向容器中添加对象完美无缺,但是使用 std::vector::erase( iterator
我正在通过这段代码使用各种浏览器尝试 localStorage 和 JSON: function getStorage() { stored = JSON.pa
您可能认为此问题与 Running two projects at once in Visual Studio 完全相同.不完全是,恰恰相反。 我有一个带有两个 MVC3 项目的 VS 2010 解决
我正在制作一个网站:http://arc-angyal.hu/ 我的第一个问题是,我无法让左侧的红色 div 足够高以填充页眉和页脚之间的空间。它位于标题之后和导航之前。我已经设置: html, bo
根据 This Question ,我正在使用线程来终止用户输入的函数。我的代码看起来像: bool stopper = false; thread stopThread(userStop, &sto
我是一名优秀的程序员,十分优秀!