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

时间:2013-06-20 07:43:55

标签: java pkcs#11

我正在尝试对XML文档进行数字签名。为此,我有2个选择。有一个由爱沙尼亚认证中心创建的程序员库,还有一个运行Java代码的脚本,由银行制作。如果使用官方(认证中心)库,那么一切都像一个带有一点调整的魅力,但是当涉及到银行脚本然后它变得狂暴导致错误:

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文件。我已经在google上阅读了很多关于导致相同错误的问题的回复,但没有一个回复似乎能够解决问题。我安装了JDK(64位)和JRE(32位)。我认为我尝试打开的.dll文件可能是32位,因此我将JAVA_HOME路径更改为指向32位JRE,但之后它说了类似

  

无法在amd 64位平台上加载IA 32位.dll。

所以我认为这不是比特的问题。在搞乱了几个小时的环境变量后,我发现它可能是银行制造的脚本的一个问题。可以吗?如果没有可能导致此错误的其他内容?

编辑:显然我尝试使用C库进行签名并且它可以正常工作,但是当使用Java库时,它会给我一个错误。

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

我100%确定opensc-pkcs11.dll是一个64位的dll,但我想知道是否有控制台无法访问system32文件夹。可以吗?

2 个答案:

答案 0 :(得分:1)

错误

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

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

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

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

答案 1 :(得分:0)

也许opensc-pkcs11.dll包含对同一目录中其他dll的引用。

我在Gemalto(Safenet)crpytoki.dll中遇到了类似的错误。解决方案是将包含cryptoki.dll的目录放入Windows PATH。