添加了crytlib jar但仍然无法链接到它

时间:2016-03-18 12:04:15

标签: java

我将crytlib.jar添加到我的Crytest项目中,但是当我运行它时。

  

线程中的异常" AWT-EventQueue-0" java.lang.UnsatisfiedLinkError中:   cryptlib.crypt.CreateContext(II)我在   cryptlib.crypt.CreateContext(本机方法)

picture1
我该如何解决这个错误?

更新1:

这是我的代码:

try{     
    int context = cryptlib.crypt.CreateContext(cryptlib.crypt.UNUSED, cryptlib.crypt.ALGO_AES);
            cryptlib.crypt.Init();
            cryptlib.crypt.SetAttributeString(context, crypt.CTXINFO_KEYING_SALT, "abcxyz");
            cryptlib.crypt.SetAttributeString(context, crypt.CTXINFO_KEYING_VALUE, key, 0,key.length);
            cryptlib.crypt.Encrypt(context, ciphertext, 0, ciphertext.length);
            cryptlib.crypt.DestroyContext(context);  
            cryptlib.crypt.End();
        }catch(CryptException e){
            e.printStackTrace();
        }

1 个答案:

答案 0 :(得分:1)

@Nadir alraedy猜测cryptlib.jar本身不包含任何本机代码。

您需要下载http://www.cypherpunks.to/~peter/cl343_beta.zip并解压缩。 Java绑定位于bindings/cryptlib.jar

要构建本机代码,我相信您可以按照第35页的manual中的Unix构建说明进行操作。

  

要构建共享库,请使用make shared。   构建cryptlib后,使用make testlib构建cryptlib自测程序   testlib或make stestlib来构建共享库自测程序stestlib。这个   将运行相当广泛的cryptlib自我测试,您可以在构建它之后运行它   确保一切正常。

编辑按照分步说明如何构建工作库。

# download the archive http://www.cypherpunks.to/~peter/cl343_beta.zip
# extract the archive to any directory
# -a switch to ensure text files not extracted with DOS lineend
unzip -a cl343_beta.zip -d ${CL_HOME}/

# fix executable bits
chmod +x tools/mkhdr.sh

# re-generate the bindings
tools/mkhdr.sh

# modify some source files
# change in ${CL_HOME}/misc/config.h
   from  /* #define USE_JAVA */
   to    #define USE_JAVA
# change in ${CL_HOME}/bindings/java_jni.c
   from  #include <jni.h>
   to    #include "jni.h"

# copy JDK header files
cd ${CL_HOME}/bindings/
cp ${JAVA_HOME}/include/jni.h .
cp ${JAVA_HOME}/inlcude/linux/jni_md.h .

# build the library
cd ${CL_HOME}/
make
make shared

作为测试代码,我参考了手册中的例子。

import cryptlib.*;
class Cryptlib {
    public static void main( String[] args) {
        System.loadLibrary( "cl" );
        try {
            crypt.Init();
            //Calls to cryptlib routines
            crypt.End();
        } catch(CryptException e) {
            e.printStackTrace();
        }
    }
};

将库文件复制到Cryptlib.java目录。

cd ${dir_of_Cryptlib.java}
cp ${CL_HOME}/bindings/cryptlib.jar .
cp ${CL_HOME}/libcl.so.3.4.3 .
ln -s libcl.so.3.4.3 libcl.so

编译代码

javac -cp cryptlib.jar Cryptlib.java

运行代码

java -cp cryptlib.jar:. -Djava.library.path=`pwd` Cryptlib

如果构建成功,将没有输出也没有例外。