2013-06-20 117 views
0

我试图对XML文档进行数字签名。为此,我有2个选项。有一个由爱沙尼亚认证中心创建的程序员图书馆,还有一个脚本,它运行由银行制作的Java代码。如果使用官方的(核证中心)库,然后一切工作像扭捏的一点点魅力,但是当涉及到银行脚本那么发狂导致错误:java.io.IOException:%1不是有效的Win32应用程序

java.io.IOException: %1 is not a valid Win32 application. 
esteid-pkcs11 
     at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.connect(Native Method) 
     at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.<init>(PKCS11Implementation.java:166) 
     at iaik.pkcs.pkcs11.wrapper.PKCS11Connector.connectToPKCS11Module(PKCS11Connector.java:75) 
     at iaik.pkcs.pkcs11.Module.getInstance(Module.java:202) 
     at client.smartcard.SmartcardHelper.initializePKCS11Module(SmartcardHelper.java:46) 
     at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:29) 
     at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:21) 
     at client.Signer.main(Signer.java:36) 
10:03:31 ERROR - Signing failed: PKCS11 initialization failed 
java.lang.RuntimeException: PKCS11 initialization failed 
     at client.smartcard.SmartcardHelper.initializePKCS11Module(SmartcardHelper.java:52) 
     at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:29) 
     at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:21) 
     at client.Signer.main(Signer.java:36) 
Caused by: java.io.IOException: %1 is not a valid Win32 application. 
esteid-pkcs11 
     at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.connect(Native Method) 
     at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.<init>(PKCS11Implementation.java:166) 
     at iaik.pkcs.pkcs11.wrapper.PKCS11Connector.connectToPKCS11Module(PKCS11Connector.java:75) 
     at iaik.pkcs.pkcs11.Module.getInstance(Module.java:202) 
     at client.smartcard.SmartcardHelper.initializePKCS11Module(SmartcardHelper.java:46) 
     ... 3 more 

Esteid-pkcs11文件是一个国家特定的dll文件。我已经阅读了很多关于谷歌的问题,这些问题导致了相同的错误,但没有一个答复似乎能够解决问题。我已经安装了JDK(64位)和JRE(32位)。我想,也许在.dll文件我试图打开是32位的,所以我改变了JAVA_HOME路径指向32位JRE,但随后说的一样

上无法加载IA 32位的.dll AMD 64位平台。

所以我觉得这不是位的问题。经过几个小时的环境变量后,我发现这可能是银行制作的脚本的问题。情况会是这样吗?如果没有其他可能会导致此错误的内容?

编辑:显然我尝试使用C库进行签名和它的工作原理,但是当使用Java库时,它给了我一个错误。

java.io.IOException: %1 is not a valid Win32 application. opensc-pkcs11.dll

我100%肯定opensc-pkcs11.dll是一个64位的DLL,但我想知道,如果可能安慰没有进入system32目录。情况会是这样吗?

+2

“%1”看起来像批处理脚本中缺少的占位符...看起来你需要传递参数给它。 – fge

+0

@echo off call env.bat java%JAVA_OPTIONS%client.Signer%* 这就是批处理脚本的样子。 –

+0

当调用批处理脚本时,我使用类似于:“sign.bat signCert = idcard file = test.xml” –

回答

0

误差

所致:java.io.IOException的:%1不是有效的Win32应用程序。

是我在64位Java环境中通过Sun PKCS#11 Provider尝试使用32位PKCS#11 DLL时得到的结果。

当我切换到64位PKCS#11 DLL时,错误停止发生。

我认为你的'esteid-pkcs11'文件是一个32位的DLL。

相关问题