1

私は web からコードを使用しています:

import iaik.pkcs.pkcs11.Module;
import iaik.pkcs.pkcs11.Info;

public class PKCS11Test {

public static void main(String[] args) {
    if (args.length == 1) {
        try {
            Module pkcs11Module = Module.getInstance(args[0], "C:/Temp/pkcs11wrapper.dll");
            pkcs11Module.initialize(null);
            Info info = pkcs11Module.getInfo();
            System.out.println(info);
            pkcs11Module.finalize(null);
        } catch (Throwable ex) {
            ex.printStackTrace();
        }
    } else {
        printUsage();
        System.exit(1);
    }
}

protected static void printUsage() {
    System.out.println("ModuleInfo <PKCS#11 module name>");
    System.out.println("e.g.: ModuleInfo pk2priv.dll");
}

}

パラメーター: pkcs11wrapper.dll および VM パラメーター -Djava.library.path=C:/Temp を使用します。

コード内の「C:/Temp/pkcs11wrapper.dll」は必要ありません...

私が得るものは:

java.io.IOException: The specified procedure could not be found.

at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.connect(Native Method)
at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.<init>(PKCS11Implementation.java:183)
at iaik.pkcs.pkcs11.wrapper.PKCS11Connector.connectToPKCS11Module(PKCS11Connector.java:92)
at iaik.pkcs.pkcs11.Module.getInstance(Module.java:223)
at PKCS11Test.main(PKCS11Test.java:11)

私のJREは64ビットで、dllも64ビットです(32ビットバージョンに置き換えると、間違ったDLLバージョンに関する明確なエラーが発生します)JREはv1.7.0.21、iaikラッパーv1.2.18です。32 ビット JRE と 32 ビット DLL を使用した場合、エラーは同じです。

ここで何が間違っている可能性がありますか?

iaikPkcs11Wrapper v1.3 のソース コードを取得しました。DEBUG モードで実行すると、次の行にPKCS11Connector.connectToPKCS11Module(String, String) line: 92
移動しreturn new PKCS11Implementation(pkcs11ModulePath, pkcs11WrapperPath);ます。ソース間には PKCS11Implementation クラスが存在しますが、デバッガーはコンストラクター コードにジャンプしたくありません。

ClassNotFoundException(Throwable).<init>(String, Throwable) line: 286   
ClassNotFoundException(Exception).<init>(String, Throwable) line: not available 
ClassNotFoundException(ReflectiveOperationException).<init>(String, Throwable) line: not available  
ClassNotFoundException.<init>(String) line: not available   
URLClassLoader$1.run() line: not available  
URLClassLoader$1.run() line: not available  
AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method]   
Launcher$ExtClassLoader(URLClassLoader).findClass(String) line: not available   
Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) line: not available 
Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available 
Launcher$AppClassLoader.loadClass(String, boolean) line: not available  
Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available  
PKCS11Connector.connectToPKCS11Module(String, String) line: 92  

これらの結果は、IAIK ソースとテスト クラスのみを含むプロジェクトを実行したときに達成されました。

4

1 に答える 1

3

例外

java.io.IOException: The specified procedure could not be found.
at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.connect(Native Method)

これは、DLL pk2priv.dll (または動的に好まれる DLL) 内で、ラッパー メソッドが、接続する必要のあるネイティブ関数を見つけられないことを意味します。どのドライバーとハードウェアを使用していますか?

于 2013-12-02T11:50:16.243 に答える