- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为客户编写一个新的 JCE 提供程序,因为我需要公开一些自定义密码。扩展 CipherSpi
和 ProviderSpi
后,我就可以构建了。所以我问客户他们的目标是哪个版本的 Java。他们回应:
# java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap3260sr9fp2-20110627_03(SR9 FP2)) IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr9-20110624_85526 (JIT enabled, AOT enabled) J9VM - 20110624_085526 JIT - r9_20101028_17488ifx17
GC - 20101027_AA)
JCL - 20110530_01
#
该死的。所以他们在 AIX 机器上使用 IBM Java 1.6.0。
我已经编写了大部分定制的 JCE 提供程序来支持所需的功能(使用 How to Implement a Provider 指南),从 扩展
包。我是否需要获取 IBM Java JDK 并从 ProviderSpi
和 CipherSpi
抽象类>com.sun.*com.ibm.*
扩展抽象类?或者我是否可以使用我的 Sun 根 Java 代码签名证书对我的 JCE 提供者 JAR 进行签名,然后将它直接放入 AIX 系统上的正确位置? (其中一个是愚蠢的,但我不知道是哪个)。
我只是对 JCE/JVM 风格了解不够,不知道我现在是否需要一个 IBM 根 Java 代码签名证书(如果存在的话),或者 Sun 根签名是否足够?
最佳答案
Oracle (Sun) 和 IBM JRE 都在使用彼此的证书来验证提供商签名。因此,如果您有使用来自 Sun 的证书签署的提供商,它将在 IBM JRE 上运行。所以是的 - IBM 根 Java 代码签名证书存在(CA 存在,即使您在 IBM 内部也几乎不可能获得证书),但是 Sun 根签名就足够了。您的密码提供程序将在 IBM JRE 上工作。您不需要使用任何 com.ibm
包。此外,可以绕过提供商签名要求:Java HotSpot Cryptographic Provider signature verification issue
提供商证书验证由内部 Java 1.6 JCE 类完成。
javax.crypto.SunJCE_b#a(X509Certificate c)
javax.crypto.b#a(X509Certificate c)
用于验证签名的 CA 证书存储在类文件中。在 Oracle JVM 中作为纯字符串。 IBM 做得更聪明——证书字符串被隐藏了。要消除它们的隐蔽性,您应该使用这段代码:
final char[] key = {0x5f, 38, 3, 111, 110};
char[] decode(final char[] input) {
final char[] output = new char[input.length];
for (int i = 0; i < output.length; i++) {
output[i] = (char)(input[i] ^ key[i % 5]);
}
return output;
}
因此在 IBM Java 1.6 中您可以找到 CA 代码签名证书:
CN = JCE 代码签名 CA,OU = Java 软件代码签名,O = Sun Microsystems Inc,L = Palo Alto,S = CA,C = US
CN = JCE 代码签名 CA,OU = IBM 代码签名,O = IBM Corporation,C = US
CN = JCE 代码签名 - 框架,OU = IBM 代码签名,O = IBM 公司,C = US
您应该扩展 java.security.Provider
类。例如,与 IBM JRE 捆绑在一起的 com.ibm.crypto.provider.IBMJCE
就是这样做的。 (据我所知,没有 ProviderSpi
类。)您也应该使用 javax.crypto.CipherSpi
类。例如,来自 IBM 提供商的 com.ibm.crypto.provider.DESCipher
就是这样做的。
关于java - IBM AIX 上的定制 JCE 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089021/
是否可以将通过 ncipher JCE API 生成的 key “重定向”到 pkcs11?我知道您可以通过 generatekey 命令重新定位,但我不知道如何对现有的 JCE key 执行此操作。
你能帮我指出默认的 RSA 填充是什么吗? 准确地说,如果我如下创建密码实例,确保 java 使用某种填充作为加密文本字节长度始终显示 256 字节的 2048 RSA key ,无论纯文本是一个字符
这个问题在这里已经有了答案: How to avoid installing "Unlimited Strength" JCE policy files when deploying an appl
我正在尝试使用 jasypt 使用基于密码的 aes 加密来加密一个简单的字符串,并且我在很多代码示例中遇到该算法以字符串形式给出,如“PBEWithSHA512AndAES256-CBC-BC”。我
我需要编写一个 java JCE 提供程序。我已经在网上查了好几天了,但找不到解决方案。您能给我一些有用的信息吗?问候, 最佳答案 文档是 here和 here ,但是你为什么要这样做呢?大多数主流加
我有一个 Joomla! 3.3.3 并且我正在使用 JCE。我的问题是编辑器没有在工具栏上显示按钮的图标。使用 Firebug,我意识到这是所有主题的 css 路径中的问题。 在本例中,我使用的是
如我所见document ,JCE 有多个提供者。如何找出默认可用的提供程序? 最佳答案 调用Security.getProviders() ,例如 for (Provider provider :
在 JRE 更新后,JCE 策略文件(位于 {java.home}/lib/security)是否被标准强度策略文件覆盖?还是这些在 JRE 更新中单独存在? 编辑:有谁知道 Mac OS X JRE
是否可以使用 Java 的 JCE 库加密整个文件夹。如果有问题,这些文件夹将包含其他文件夹/文件。对于那些不知道 JCE 是什么的人,它代表 Java Cryptography Extension,
我正在使用以下代码来获取 AESCMAC Mac mac = Mac.getInstance("aescmac", new BouncyCastleProvider()); mac.init(k_ma
我已经安装了JDK 7 。其中已包含以下 JAR: local_policy US_export_policy 但是当我开始申请时,我面临着 JCE error 。所以我用谷歌搜索并下载了JDK 7
有谁知道为什么我无法在 Eclipse 中查看“Cipher”的源代码?源代码在那里,我可以看到 openjdk 中的一些其他内置源代码,例如“println”,但无法弄清楚为什么我无法查看“Ciph
我必须运行一个相当旧的程序代码,它使用 ABA-provider for JCE。所有类都可以在源文件夹中找到。但是,会出现 NoSuchProviderException:“JCE 无法验证提供程序
我开发了一个应用程序,在 BountyCaSTLe.jar 的帮助下,我在其中使用了密码术。我还有一行 Security.addProvider(new org.bouncycaSTLe.jce.pr
我们有自定义的 JCE 安全提供商,它使用我们的智能卡来执行加密操作。 当我们尝试使用某些类(如 Cipher、KeyAgreement、KeyGenerator、Mac 或 SecretKeyFac
我有一个关于 JCE 加密的问题。您如何用 Java 编写自己的加密算法/ key 生成器,可以将其作为 .jar 文件安装在 ext 目录中?我想出了算法的基本思想,但我不知道如何实现它。我是否将
我正在开发一个程序,我将使用该程序使用 JCE 来加密和解密文件。我的加密和解密在默认模式 (ECB/PKCS5PADDING) 下正常工作,但是当我尝试使用 CBC 并解密我的文件时,我得到的一些文
我们已将 Java 产品配置为仅使用经 FIPS 验证的 RSA JCE 加密提供程序。但是,当 只有 RSA 库在 java.security 中列出时,该产品将无法工作。因此,有些东西正在向其他提
Sun 的 PKCS11 JCE 安全提供程序缺少我们需要的一些功能。 所以我使用原始资源编写了它的增强版本。 不幸的是,JCE 基础设施拒绝了新的提供者 “JCE 无法验证提供者” 因为它没有正确签
不论是JCE还是CKEDITOR,都没解决中文名文件的问题,要么上传失败,要么传上去了中文名不能被web访问。相比之下,JCE更加人性化,比如文件上传后默认被选中,不需用户在那么小的弹出窗口去上下翻
我是一名优秀的程序员,十分优秀!