我将crytlib.jar
添加到我的Crytest
项目中,但是当我运行它时。
线程中的异常" AWT-EventQueue-0" java.lang.UnsatisfiedLinkError中: cryptlib.crypt.CreateContext(II)我在 cryptlib.crypt.CreateContext(本机方法)
这是我的代码:
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();
}
答案 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
如果构建成功,将没有输出也没有例外。