Java IBM AIX上的定制JCE提供程序

Java IBM AIX上的定制JCE提供程序,java,cryptography,aix,jce,Java,Cryptography,Aix,Jce,我正在为客户端编写一个新的JCE提供程序,因为我需要公开一些自定义密码。在扩展了CipherSpi和ProviderSpi之后,我就可以开始构建了。所以我问客户他们的目标是哪个版本的Java。他们的答复是: #java-版本 java版本“1.6.0” Java(TM)SE运行时环境(构建pap3260sr9fp2-20110627_03(SR9 FP2))IBM J9 VM(构建2.4,JRE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr9-20110624_

我正在为客户端编写一个新的JCE提供程序,因为我需要公开一些自定义密码。在扩展了
CipherSpi
ProviderSpi
之后,我就可以开始构建了。所以我问客户他们的目标是哪个版本的Java。他们的答复是:

#java-版本
java版本“1.6.0”
Java(TM)SE运行时环境(构建pap3260sr9fp2-20110627_03(SR9 FP2))IBM J9 VM(构建2.4,JRE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr9-20110624_85526(启用JIT,启用AOT)J9VM-20110624_085526 JIT-r9_20101028_17488ifx17
GC-20101027(AA)
JCL-20110530_01
#
该死。因此,他们在AIX机器中使用IBMJava1.6.0

我编写了大多数定制JCE提供程序来支持所需的功能(使用指南),扩展了
com.sun.
包中的
ProviderSpi
CipherSpi
抽象类。我是否需要从
com.IBM.*
获取IBMJavaJDK并扩展抽象类?或者,我可以使用基于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
包。此外,还可以绕过提供商签名要求:

详细说明 1.证书 提供者证书验证由内部Java1.6JCE类完成

  • 在Oracle
    javax.crypto.SunJCE#u#a(X509Certificate c)
  • 在IBM
    javax.crypto.b#a(X509C)
用于验证签名的CA证书存储在类文件中。在OracleJVM中,作为普通字符串。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;
}
final char[]key={0x5f,38,3,111,110};
字符[]解码(最终字符[]输入){
最终字符[]输出=新字符[input.length];
for(int i=0;i
因此,在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公司,C=US
  • CN=JCE代码签名-框架,OU=IBM代码签名,O=IBM公司,C=US
2.基本提供程序类
您应该扩展
java.security.Provider
类。例如,与IBMJRE捆绑在一起的
com.ibm.crypto.provider.IBMJCE
就可以做到这一点。(假设没有
ProviderSpi
class。)您也应该使用
javax.crypto.CipherSpi
class。例如,ibm provider提供的
com.ibm.crypto.provider.DESCipher
就是这样做的。

不确定您为什么会对此投反对票,这似乎是一个有用的答案。当我的同事belial不在办公室时,我们已经在IBMJava上做了一些进一步的测试,并且可以确认Sun JCE provider在IBMJava上运行良好。很高兴了解根本原因。也许有人不理解我的反应。既然你已经确认了,你就可以把我的答案标记为正确;)只有贝利尔能做到这一点。我会很吝啬,坚持悬赏,以防万一第二天左右会有一个惊人的精彩的四页答案:-)好的:)我很快会用细节来扩展我的答案。我想你使用的不是com.sun.*包,而是java.security和javax.crypto