2

最初にCipher Classを使用してみましたが、パフォーマンスのために破棄する必要があります。Cipher Class は多くのインスタンスを生成し、GC が崩壊します。もう 1 つの方法は NDK を使用することです。そのため、openssl-androidをビルドすることができました。libcrypto.so と libssl.so がビルドされたので、プロジェクト内の新しい .c ファイルとそれらをリンクして、Java 側で必要な暗号化関数のラッパーを作成する方法がわかりません。

これは私が必要とする libcrypto.so の機能です:

void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, const int enc);

ラッパーは次のようになります: Java 側:

public static native byte[] AESEncrypt(byte[] in, byte[] key, byte[] ivec, int enc);

ネイティブ ラッパー (共有ライブラリを含む .c ファイル側)

jbyteArray Java_com_myApp_Main_AESEncrypt(JNIEnv* env, jobject this, jbyteArray in, jbyteArray key, jbyteArray ivec, jint enc)

よろしくお願いします。私の英語が上手でない場合は申し訳ありません。

4

1 に答える 1

1

JavaCPPを使用すると、次のようなインターフェイス .java ファイルでうまくいくはずです

@Platform(include="openssl/aes.h", link="crypto")
public class crypto {
    static { Loader.load(); }
    public static native void AES_cbc_encrypt(@Cast("unsigned char *") byte[] in,
            @Cast("unsigned char *") byte[] out, @Cast("size_t") long length,
            @Cast("const AES_KEY *") byte[] key, @Cast("unsigned char *") byte[] ivec, int enc);
}

そして、それを別の静的メソッドにラップして、目的の API に一致させることができます。

于 2013-02-06T00:05:30.877 に答える