日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JNI 在实际项目中的使用方法

發布時間:2023/12/10 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JNI 在实际项目中的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要講述JNI在實際項目中的使用方法,主要目的是記錄,不做太多說明,代碼如下:

1、CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.5)project("device-authentication")INCLUDE_DIRECTORIES(/usr/include ../../include ../../net ../../net/mbedtls/include ../../smalgo/sms4/include)SET(my_src_crypto../../net/mbedtls/library/aes.c../../net/mbedtls/library/aesni.c../../net/mbedtls/library/base64.c../../net/mbedtls/library/rsa.c../../net/mbedtls/library/rsa_internal.c../../net/mbedtls/library/entropy.c../../net/mbedtls/library/entropy_poll.c../../net/mbedtls/library/bignum.c../../net/mbedtls/library/sha1.c../../net/mbedtls/library/sha256.c../../net/mbedtls/library/sha512.c../../net/mbedtls/library/md.c../../net/mbedtls/library/md5.c../../net/mbedtls/library/md_wrap.c../../net/mbedtls/library/ripemd160.c../../net/mbedtls/library/platform_util.c../../net/mbedtls/library/oid.c../../net/mbedtls/library/timing.c../../net/mbedtls/library/net_sockets.c../../smalgo/sms4/cbc128.c../../smalgo/sms4/sms4_cbc.c../../smalgo/sms4/sms4_common.c../../smalgo/sms4/sms4_enc.c../../smalgo/sms4/sms4_setkey.c)SET(my_src_crypto_dbg../../net/mbedtls/library/ctr_drbg.c)SET(SRC_LIST_AUTH_DEV${my_src_crypto}${my_src_crypto_dbg})SET(my_src_cloud./authserverjni.c)ADD_DEFINITIONS(-fPIC) ADD_LIBRARY(cloud SHARED ${SRC_LIST_AUTH_DEV} ${my_src_cloud})

2、頭文件(com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI.h)

/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI */#ifndef _Included_com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI #define _Included_com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI #ifdef __cplusplus extern "C" { #endif /* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: decrypUidOnServer * Signature: (Ljava/lang/String;[C)Ljava/lang/String; */ JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_decrypUidOnServer(JNIEnv *, jobject, jstring, jbyteArray);/* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: parseUidOnServer * Signature: (Ljava/lang/String;)Lcom/openailab/oascloud/security/model/UidMeanBO; */ JNIEXPORT jobject JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_parseUidOnServer(JNIEnv *, jobject, jbyteArray);/* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: getSnByUidOnServer * Signature: (Ljava/lang/String;[B[B)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_getSnByUidOnServer(JNIEnv *, jobject, jbyteArray, jbyteArray, jbyteArray);/* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: aesCbcEncrypOnServer * Signature: (Ljava/lang/String;[B[B)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_aesCbcEncrypOnServer(JNIEnv *, jobject, jstring, jbyteArray, jbyteArray);/* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: aesCbcDecrypOnServer * Signature: (Ljava/lang/String;[B[B)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_aesCbcDecrypOnServer(JNIEnv *, jobject, jstring, jbyteArray, jbyteArray);/* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: genMD5 * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_genMD5(JNIEnv *, jobject, jstring);/* * Class: com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI * Method: genRsaKey * Signature: ()Lcom/openailab/oascloud/security/model/RsaBO; */ JNIEXPORT jobject JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_genRsaKey(JNIEnv *, jobject);/* * Class: com_openailab_oascloud_security_jni_cloud_CloudAuthJNI * Method: sm4Encrypt * Signature: ([B[B[B)[B */ JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_sm4Encrypt(JNIEnv *, jobject, jbyteArray, jbyteArray, jbyteArray);/* * Class: com_openailab_oascloud_security_jni_cloud_CloudAuthJNI * Method: sm4Decrypt * Signature: ([B[B[B)[B */ JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_sm4Decrypt(JNIEnv *, jobject, jbyteArray, jbyteArray, jbyteArray);#ifdef __cplusplus } #endif #endif

3、authserverjni.c

#include "com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI.h" #include <stdio.h> #include <string.h> #include <stdint.h> #include <stdlib.h> #include <sys/time.h> #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/rsa.h" #include "mbedtls/aes.h" #include "mbedtls/base64.h" #include "mbedtls/md5.h" #include "sms4.h"#define USERID_LEN 16 #define CONTRACTID_LEN 16 #define UID_LEN 64 #define SN_LEN 128 #define FINAL_UID_LEN 156 #define SWID_LEN 12 #define RSA_KEY_SIZE 1024 #define EXPONENT 65537 #define BUFFER_SIZE 1024 #define RSA_KEY_LEN 256 #define AES_KEY_DEC_LEN 8 #define LICENSE_DEC_LEN 64 #define AES_KEY_SIZE 48 #define AES_IV_LEN 16typedef struct __rsa {uint8_t buf[BUFFER_SIZE * 8];uint8_t* rsa_n;uint8_t* rsa_e;uint8_t* rsa_d;uint8_t* rsa_p;uint8_t* rsa_q;uint8_t* rsa_dp;uint8_t* rsa_dq;uint8_t* rsa_qp;uint32_t n_len;uint32_t e_len;uint32_t d_len;uint32_t p_len;uint32_t q_len;uint32_t dp_len;uint32_t dq_len;uint32_t qp_len; } T_rsa;static void init_rsa_keys(T_rsa* rsa) {memset(rsa->buf, 0, BUFFER_SIZE * 8);rsa->rsa_n = &rsa->buf[BUFFER_SIZE * 0];rsa->rsa_e = &rsa->buf[BUFFER_SIZE * 1];rsa->rsa_d = &rsa->buf[BUFFER_SIZE * 2];rsa->rsa_p = &rsa->buf[BUFFER_SIZE * 3];rsa->rsa_q = &rsa->buf[BUFFER_SIZE * 4];rsa->rsa_dp = &rsa->buf[BUFFER_SIZE * 5];rsa->rsa_dq = &rsa->buf[BUFFER_SIZE * 6];rsa->rsa_qp = &rsa->buf[BUFFER_SIZE * 7];rsa->n_len = BUFFER_SIZE;rsa->e_len = BUFFER_SIZE;rsa->d_len = BUFFER_SIZE;rsa->p_len = BUFFER_SIZE;rsa->q_len = BUFFER_SIZE;rsa->dp_len = BUFFER_SIZE;rsa->dq_len = BUFFER_SIZE;rsa->qp_len = BUFFER_SIZE; }void rsa_encrypt(const T_rsa *r,const unsigned char* plaintext,unsigned int plaintext_size,unsigned char *ciphertext,size_t *ciphertext_size) {mbedtls_rsa_context rsa;mbedtls_entropy_context entropy;mbedtls_ctr_drbg_context ctr_drbg;mbedtls_entropy_init(&entropy);mbedtls_ctr_drbg_init(&ctr_drbg);mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0);mbedtls_rsa_init(&rsa, MBEDTLS_RSA_PKCS_V15, 0);mbedtls_mpi_read_binary(&rsa.N, r->rsa_n, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.E, r->rsa_e, BUFFER_SIZE);*ciphertext_size = rsa.len = (mbedtls_mpi_bitlen(&rsa.N) + 7) >> 3;mbedtls_rsa_pkcs1_encrypt(&rsa, mbedtls_ctr_drbg_random, &ctr_drbg, MBEDTLS_RSA_PUBLIC, plaintext_size, plaintext, ciphertext);mbedtls_rsa_free(&rsa);mbedtls_ctr_drbg_free(&ctr_drbg);mbedtls_entropy_free(&entropy); }void rsa_decrypt(const T_rsa *r,const unsigned char* ciphertext,//unsigned int ciphertext_size,unsigned char *plaintext,size_t *plaintext_size) {mbedtls_rsa_context rsa;mbedtls_entropy_context entropy;mbedtls_ctr_drbg_context ctr_drbg;mbedtls_entropy_init(&entropy);mbedtls_ctr_drbg_init(&ctr_drbg);mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0);mbedtls_rsa_init(&rsa, MBEDTLS_RSA_PKCS_V15, 0);mbedtls_mpi_read_binary(&rsa.N, r->rsa_n, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.E, r->rsa_e, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.D, r->rsa_d, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.P, r->rsa_p, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.Q, r->rsa_q, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.DP, r->rsa_dp, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.DQ, r->rsa_dq, BUFFER_SIZE);mbedtls_mpi_read_binary(&rsa.QP, r->rsa_qp, BUFFER_SIZE);rsa.len = (mbedtls_mpi_bitlen(&rsa.N) + 7) >> 3;mbedtls_rsa_pkcs1_decrypt(&rsa, mbedtls_ctr_drbg_random, &ctr_drbg, MBEDTLS_RSA_PRIVATE, plaintext_size, ciphertext, plaintext, *plaintext_size);mbedtls_rsa_free(&rsa);mbedtls_ctr_drbg_free(&ctr_drbg);mbedtls_entropy_free(&entropy); }static uint8_t hex_lookup[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'a', 'b', 'c', 'd', 'e', 'f' }; static void array2hex(uint8_t* in, int inlen, uint8_t* out) {int i;for (i = 0; i < inlen; ++i){out[2 * i] = hex_lookup[in[i] >> 4];out[2 * i + 1] = hex_lookup[in[i] & 0x0f];} }static void hex2array(uint8_t* in, int inlen, uint8_t* out) {int i;unsigned char r;for (i = 0; i < inlen; i += 2){r = in[i] - '0';if (r > 9) r += '0' + 10 - 'a';//printf("%c(%x): %x\n", in[i], in[i], r);out[i / 2] = r << 4;r = in[i + 1] - '0';if (r > 9) r += '0' + 10 - 'a';out[i / 2] += r;//printf("%c(%x): %x <%x>\n", in[i+1], in[i+1], r, out[i/2]);} }//len should be 16*N bytes int aes_cbc_encryp(uint8_t *aes_key, uint8_t *iv, uint8_t *plaintext, uint8_t *ciphertext, uint32_t len) {int i;int blk = (len + 15) >> 4;mbedtls_aes_context aes_ctx;mbedtls_aes_init(&aes_ctx);//setkey_decmbedtls_aes_setkey_enc(&aes_ctx, aes_key, 256);for (i = 0; i < blk; ++i){mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, 16, iv, plaintext + (i * 16), ciphertext + (i * 16));}mbedtls_aes_free(&aes_ctx);return 0; //OK } //len should be 16*N bytes int aes_cbc_decryp(uint8_t *aes_key, uint8_t *iv, uint8_t *ciphertext, uint8_t *plaintext, uint32_t len) {int i;int blk = (len + 15) >> 4;mbedtls_aes_context aes_ctx;mbedtls_aes_init(&aes_ctx);//setkey_decmbedtls_aes_setkey_dec(&aes_ctx, aes_key, 256);for (i = 0; i < blk; ++i){mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, 16, iv, ciphertext + (i * 16), plaintext + (i * 16));}mbedtls_aes_free(&aes_ctx);return 0; //OK }static int SetServerPrivateKey(T_rsa *r, uint8_t *prv_key) {memcpy(r->buf, prv_key, 8192);//memset(&r->buf[0], 0, 1024-128);//memset(&r->buf[1024], 0, 1024-4);//memset(&r->buf[2048], 0, 1024-128);//memset(&r->buf[3072], 0, 1024-64);//memset(&r->buf[4096], 0, 1024-64);//memset(&r->buf[5120], 0, 1024-64);//memset(&r->buf[6144], 0, 1024-64);//memset(&r->buf[7168], 0, 1024-64);return 0; //OK }static int SetServerPublicKey(T_rsa *r, uint8_t *pub_key) {memcpy(r->buf, pub_key, 2048);//memset(&r->buf[0], 0, 1024-128);//memset(&r->buf[1024], 0, 1024-4);//memset(&r->buf[2048], 0, 1024-128);//memset(&r->buf[3072], 0, 1024-64);//memset(&r->buf[4096], 0, 1024-64);//memset(&r->buf[5120], 0, 1024-64);//memset(&r->buf[6144], 0, 1024-64);//memset(&r->buf[7168], 0, 1024-64);return 0; //OK } #if 0 //len should be 16*N bytes int aes_ecb_encryp(uint8_t *aes_key, uint8_t *plaintext, uint8_t *ciphertext, uint32_t len) {int i;int blk = (len + 15) >> 4;mbedtls_aes_context aes_ctx;mbedtls_aes_init(&aes_ctx);//setkey_decmbedtls_aes_setkey_enc(&aes_ctx, aes_key, 256);for (i = 0; i < blk; ++i){mbedtls_aes_crypt_ecb(&aes_ctx, MBEDTLS_AES_ENCRYPT, plaintext + (i * 16), ciphertext + (i * 16));}mbedtls_aes_free(&aes_ctx);return 0; //OK } //len should be 16*N bytes int aes_ecb_decryp(uint8_t *aes_key, uint8_t *ciphertext, uint8_t *plaintext, uint32_t len) {int i;int blk = (len + 15) >> 4;mbedtls_aes_context aes_ctx;mbedtls_aes_init(&aes_ctx);//setkey_decmbedtls_aes_setkey_dec(&aes_ctx, aes_key, 256);for (i = 0; i < blk; ++i){mbedtls_aes_crypt_ecb(&aes_ctx, MBEDTLS_AES_DECRYPT, ciphertext + (i * 16), plaintext + (i * 16));}mbedtls_aes_free(&aes_ctx);return 0; //OK } #endif int GetMD5(uint8_t *text, int len, uint8_t md5[16]) {mbedtls_md5_context md5_ctx;mbedtls_md5_init(&md5_ctx);mbedtls_md5_starts(&md5_ctx);mbedtls_md5_update(&md5_ctx, text, len);mbedtls_md5_finish(&md5_ctx, md5);mbedtls_md5_free(&md5_ctx);return 0; //OK } static int reoder(uint8_t *src, uint8_t *dst, int len) {int i;int m = 0;int n = len - 1;for (i = 0; i < len; i++){if (i % 3 == 0){dst[m++] = src[i];}else{dst[n--] = src[i];}}return 0; }static int recover(uint8_t *src, uint8_t *dst, int len) {int i;int m = 0;int n = len - 1;for (i = 0; i < len; i++){if (i % 3 == 0){dst[i] = src[m++];}else{dst[i] = src[n--];}}return 0; }//@server //sn's length should >= AES_KEY_SIZE + AES_IV_LEN int genSN(uint8_t *sn, size_t* sn_len, uint8_t* key, uint8_t* iv, uint8_t uid_local[UID_LEN]) {int i;for (i = 0; i < AES_KEY_SIZE; ++i) {sn[i] = key[i] ^ uid_local[i];}for (i = 0; i < AES_IV_LEN; ++i) {sn[i + AES_KEY_SIZE] = iv[i] ^ uid_local[i];}*sn_len = AES_KEY_SIZE + AES_IV_LEN;return 0; //OK }void generate_rsa(T_rsa* r) {mbedtls_rsa_context rsa;mbedtls_entropy_context entropy;mbedtls_ctr_drbg_context ctr_drbg;mbedtls_entropy_init(&entropy);mbedtls_ctr_drbg_init(&ctr_drbg);mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0);mbedtls_rsa_init(&rsa, MBEDTLS_RSA_PKCS_V15, 0);mbedtls_rsa_gen_key(&rsa, mbedtls_ctr_drbg_random, &ctr_drbg, RSA_KEY_SIZE, EXPONENT);mbedtls_mpi_write_binary(&rsa.N, r->rsa_n, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.E, r->rsa_e, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.D, r->rsa_d, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.P, r->rsa_p, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.Q, r->rsa_q, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.DP, r->rsa_dp, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.DQ, r->rsa_dq, BUFFER_SIZE);mbedtls_mpi_write_binary(&rsa.QP, r->rsa_qp, BUFFER_SIZE);mbedtls_rsa_free(&rsa);mbedtls_ctr_drbg_free(&ctr_drbg);mbedtls_entropy_free(&entropy); }JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_decrypUidOnServer (JNIEnv *env, jobject obj, jstring uidEnc, jbyteArray privateKey) {uint8_t *uid_enc = (*env)->GetStringUTFChars(env, uidEnc, NULL);uint8_t *private_key = (*env)->GetByteArrayElements(env, privateKey, NULL);jbyteArray ret = NULL;T_rsa r;uint8_t plaintext[UID_LEN];size_t plaintext_len = 256;uint8_t UID_Recover[SN_LEN];uint8_t uid_enc_c[FINAL_UID_LEN];init_rsa_keys(&r);SetServerPrivateKey(&r, private_key);hex2array(uid_enc, FINAL_UID_LEN * 2, uid_enc_c);recover(&uid_enc_c[FINAL_UID_LEN - SN_LEN], UID_Recover, SN_LEN);rsa_decrypt(&r, UID_Recover, plaintext, &plaintext_len);/*printf("plaintext=\n");for (size_t i = 0; i < UID_LEN; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("%02x,", plaintext[i]);}printf("\n");*/ret = (*env)->NewByteArray(env, UID_LEN);(*env)->SetByteArrayRegion(env, ret, 0, UID_LEN, (jbyte*)plaintext);(*env)->ReleaseByteArrayElements(env, privateKey, private_key, 0);(*env)->ReleaseStringUTFChars(env, uidEnc, uid_enc);return ret; }JNIEXPORT jobject JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_parseUidOnServer (JNIEnv *env, jobject obj, jbyteArray uid) {jclass jclassResultInfo = (*env)->FindClass((env), "com/openailab/oascloud/security/model/UidMeanBO");jmethodID jidResultInfo = (*env)->GetMethodID(env, jclassResultInfo, "<init>", "([B[B[B[B[B[B[B[B[B)V");uint8_t *uid_c = (*env)->GetByteArrayElements(env, uid, NULL);/*printf("uid_c=\n");for (size_t i = 0; i < UID_LEN; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("%02x,", uid_c[i]);}printf("\n");*/uint8_t md5[16];uint8_t contractid[CONTRACTID_LEN];uint8_t mac[6];uint8_t deviceid[10];uint8_t softwareversion[4];uint8_t productfeature[8];uint8_t softwareMD5[16];uint8_t userpswd[USERID_LEN];uint8_t userpswdMD5[16];uint8_t time[4];//1. uid from chipmemcpy(contractid, &uid_c[0], CONTRACTID_LEN);jbyteArray contractid_j = (*env)->NewByteArray(env, CONTRACTID_LEN);(*env)->SetByteArrayRegion(env, contractid_j, 0, CONTRACTID_LEN, (jbyte*)contractid);//2. MAC, 6 bytesmemcpy(mac, &uid_c[16], 6);jbyteArray mac_j = (*env)->NewByteArray(env, 6);(*env)->SetByteArrayRegion(env, mac_j, 0, 6, (jbyte*)mac);//3. user id from efpg UA(start 1447, num 601), 4 bytesmemcpy(deviceid, &uid_c[22], 10);jbyteArray deviceid_j = (*env)->NewByteArray(env, 10);(*env)->SetByteArrayRegion(env, deviceid_j, 0, 10, (jbyte*)deviceid);//4. software_version, 4 bytesmemcpy(softwareversion, &uid_c[32], 4);jbyteArray softwareversion_j = (*env)->NewByteArray(env, 4);(*env)->SetByteArrayRegion(env, softwareversion_j, 0, 4, (jbyte*)softwareversion);//5. get product_serial, 8 bytesmemcpy(productfeature, &uid_c[36], 8);jbyteArray productfeature_j = (*env)->NewByteArray(env, 8);(*env)->SetByteArrayRegion(env, productfeature_j, 0, 8, (jbyte*)productfeature);//6. gen md5 for software_version+product_serial, 12 bytesGetMD5(&uid_c[32], 12, md5);memcpy(softwareMD5, md5, 16);jbyteArray softwareMD5_j = (*env)->NewByteArray(env, 16);(*env)->SetByteArrayRegion(env, softwareMD5_j, 0, 16, (jbyte*)softwareMD5);//7. get user password, 16 bytesmemcpy(userpswd, &uid_c[44], USERID_LEN);jbyteArray userpswd_j = (*env)->NewByteArray(env, USERID_LEN);(*env)->SetByteArrayRegion(env, userpswd_j, 0, USERID_LEN, (jbyte*)userpswd);//8. gen md5 for user password, 16 bytesGetMD5(&uid_c[44], USERID_LEN, md5);memcpy(userpswdMD5, md5, 16);jbyteArray userpswdMD5_j = (*env)->NewByteArray(env, USERID_LEN);(*env)->SetByteArrayRegion(env, userpswdMD5_j, 0, USERID_LEN, (jbyte*)userpswdMD5);//9. get time now, 4 bytesmemcpy(time, &uid_c[60], 4);jbyteArray time_j = (*env)->NewByteArray(env, 4);(*env)->SetByteArrayRegion(env, time_j, 0, 4, (jbyte*)time);jobject ret = (*env)->NewObject(env, jclassResultInfo, jidResultInfo, contractid_j, mac_j, deviceid_j, softwareversion_j, productfeature_j, softwareMD5_j, userpswd_j, userpswdMD5_j, time_j);(*env)->DeleteLocalRef(env, contractid_j);(*env)->DeleteLocalRef(env, mac_j);(*env)->DeleteLocalRef(env, deviceid_j);(*env)->DeleteLocalRef(env, softwareversion_j);(*env)->DeleteLocalRef(env, productfeature_j);(*env)->DeleteLocalRef(env, softwareMD5_j);(*env)->DeleteLocalRef(env, userpswd_j);(*env)->DeleteLocalRef(env, userpswdMD5_j);(*env)->DeleteLocalRef(env, time_j);return ret; }int fake_rsa_encrypt(const unsigned char* plaintext,unsigned int plaintext_size,unsigned char *ciphertext,size_t *ciphertext_size) {struct timeval time;gettimeofday(&time, NULL);// microsecond has 1 000 000// Assuming you did not need quite that accuracy// Also do not assume the system clock has that accuracy.srand((time.tv_sec * 1000) + (time.tv_usec / 1000));if ((plaintext_size < 128) && (!(plaintext_size & 3))) {int i, j;for (i = 0; i < (int)(128 - plaintext_size); i += 4) {long rdm = random();ciphertext[i + 0] = (rdm >> 24) & 0xff;ciphertext[i + 1] = (rdm >> 16) & 0xff;ciphertext[i + 2] = (rdm >> 8) & 0xff;ciphertext[i + 3] = (rdm)& 0xff;}for (i = 128 - plaintext_size, j = 0; i < 128; ++i, ++j) {ciphertext[i] = plaintext[j] ^ ciphertext[j];}}else {return -1;}*ciphertext_size = 128;return 0; }JNIEXPORT jstring JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_getSnByUidOnServer (JNIEnv *env, jobject obj, jbyteArray uidLocal, jbyteArray key, jbyteArray iv) {uint8_t *uidLocal_c = (*env)->GetByteArrayElements(env, uidLocal, NULL);uint8_t *key_c = (*env)->GetByteArrayElements(env, key, 0);uint8_t *iv_c = (*env)->GetByteArrayElements(env, iv, 0);uint8_t sn[SN_LEN];uint8_t sn_reorder[SN_LEN];uint8_t sn_final[SN_LEN * 2];uint8_t SN[AES_KEY_SIZE + AES_IV_LEN];size_t SN_len = AES_KEY_SIZE + AES_IV_LEN;size_t ciphertext_len = SN_LEN;/*printf("uidLocal_c=\n");for (int i = 0; i < UID_LEN; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", uidLocal_c[i]);}printf("\n");printf("key_c=\n");for (int i = 0; i < AES_KEY_SIZE; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", key_c[i]);}printf("\n");printf("iv_c=\n");for (int i = 0; i < AES_IV_LEN; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", iv_c[i]);}printf("\n");*/// generate SNgenSN(SN, &SN_len, key_c, iv_c, uidLocal_c);/*printf("SN=\n");for (int i = 0; i < SN_len; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", SN[i]);}printf("\n");*/fake_rsa_encrypt(SN, SN_len, sn, &ciphertext_len);/*printf("sn=\n");for (int i = 0; i < ciphertext_len; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", sn[i]);}printf("\n");*/reoder(sn, sn_reorder, SN_LEN);/*printf("sn_reorder=\n");for (int i = 0; i < SN_LEN; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", sn_reorder[i]);}printf("\n");*/array2hex(sn_reorder, SN_LEN, sn_final);/*printf("sn_final=\n");for (int i = 0; i < SN_LEN * 2; i++){if (i > 0 && i % 16 == 0) {printf("\n");}printf("0x%02x,", sn_final[i]);}printf("\n");*/(*env)->ReleaseByteArrayElements(env, key, key_c, 0);(*env)->ReleaseByteArrayElements(env, iv, iv_c, 0);(*env)->DeleteLocalRef(env, uidLocal_c);return (*env)->NewStringUTF(env, sn_final); }JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_aesCbcEncrypOnServer (JNIEnv *env, jobject obj, jbyteArray plaintext, jbyteArray key, jbyteArray iv) {jsize plaintext_len = (*env)->GetArrayLength(env, plaintext);uint8_t *plaintext_c = (*env)->GetByteArrayElements(env, plaintext, NULL);uint8_t *key_c = (*env)->GetByteArrayElements(env, key, 0);uint8_t *iv_c = (*env)->GetByteArrayElements(env, iv, 0);uint8_t *ciphertext = (uint8_t*)malloc(plaintext_len);int ret = aes_cbc_encryp(key_c, iv_c, plaintext_c, ciphertext, plaintext_len);if (ret) {(*env)->ReleaseByteArrayElements(env, key, key_c, 0);(*env)->ReleaseByteArrayElements(env, iv, iv_c, 0);(*env)->DeleteLocalRef(env, plaintext);return NULL;}jbyteArray retarr = (*env)->NewByteArray(env, plaintext_len);(*env)->SetByteArrayRegion(env, retarr, 0, plaintext_len, (jbyte*)ciphertext);free(ciphertext);(*env)->ReleaseByteArrayElements(env, key, key_c, 0);(*env)->ReleaseByteArrayElements(env, iv, iv_c, 0);(*env)->ReleaseByteArrayElements(env, plaintext, plaintext_c, 0);return retarr; }JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_aesCbcDecrypOnServer (JNIEnv *env, jobject obj, jbyteArray ciphertext, jbyteArray key, jbyteArray iv) {jsize ciphertext_len = (*env)->GetArrayLength(env, ciphertext);uint8_t *ciphertext_c = (*env)->GetByteArrayElements(env, ciphertext, NULL);uint8_t *key_c = (*env)->GetByteArrayElements(env, key, 0);uint8_t *iv_c = (*env)->GetByteArrayElements(env, iv, 0);uint8_t *plaintext;plaintext = (uint8_t*)malloc(ciphertext_len);int ret = aes_cbc_decryp(key_c, iv_c, ciphertext_c, plaintext, ciphertext_len);if (ret) {(*env)->ReleaseByteArrayElements(env, key, key_c, 0);(*env)->ReleaseByteArrayElements(env, iv, iv_c, 0);(*env)->DeleteLocalRef(env, ciphertext_c);return NULL;}jbyteArray retarr = (*env)->NewByteArray(env, ciphertext_len);(*env)->SetByteArrayRegion(env, retarr, 0, ciphertext_len, (jbyte*)plaintext);free(plaintext);(*env)->ReleaseByteArrayElements(env, key, key_c, 0);(*env)->ReleaseByteArrayElements(env, iv, iv_c, 0);(*env)->ReleaseByteArrayElements(env, ciphertext, ciphertext_c, 0);return retarr; }JNIEXPORT jstring JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_genMD5 (JNIEnv *env, jobject obj, jstring text) {jsize text_len = (*env)->GetStringUTFLength(env, text);uint8_t *text_c = (*env)->GetStringUTFChars(env, text, NULL);uint8_t md5[16];GetMD5(text_c, text_len, md5);(*env)->DeleteLocalRef(env, text);return (*env)->NewStringUTF(env, md5); }JNIEXPORT jobject JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_genRsaKey (JNIEnv *env, jobject obj) {jclass jclassResultInfo = (*env)->FindClass((env), "com/openailab/oascloud/security/model/RsaBO");jmethodID jidResultInfo = (*env)->GetMethodID(env, jclassResultInfo, "<init>", "([B[B)V");T_rsa r;uint8_t pub_key[2048] = { 0 };uint8_t prv_key[8192] = { 0 };init_rsa_keys(&r);generate_rsa(&r);//1. public keymemcpy(pub_key, r.buf, 2048);//2. private keymemcpy(prv_key, r.buf, 8192);jbyteArray j_pub_key = (*env)->NewByteArray(env, 2048);(*env)->SetByteArrayRegion(env, j_pub_key, 0, 2048, (const jbyte*)pub_key);jbyteArray j_prv_key = (*env)->NewByteArray(env, 8192);(*env)->SetByteArrayRegion(env, j_prv_key, 0, 8192, (const jbyte*)prv_key);jobject ret = (*env)->NewObject(env, jclassResultInfo, jidResultInfo, j_pub_key, j_prv_key);(*env)->DeleteLocalRef(env, j_pub_key);(*env)->DeleteLocalRef(env, j_prv_key);return ret; }JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_sm4Encrypt(JNIEnv *env, jobject obj, jbyteArray j_plain_text_arr, jbyteArray j_key_arr, jbyteArray j_iv_arr) {unsigned char enc_text[64] = { 0 };jbyteArray ret = NULL;jbyte *j_plain_text = NULL;jbyte *j_key = NULL;jbyte *j_iv = NULL;sms4_key_t sms4_key;int chars_len = 0;unsigned char *plain_text = { 0 };unsigned char *key = { 0 };unsigned char *iv = { 0 };uint8_t sm4_iv[AES_IV_LEN] = {0};//j_plain_text_arr to char *j_plain_text = (*env)->GetByteArrayElements(env, j_plain_text_arr, 0);chars_len = (*env)->GetArrayLength(env, j_plain_text_arr);plain_text = malloc(chars_len + 1);memset(plain_text, 0, chars_len + 1);memcpy(plain_text, j_plain_text, chars_len);//j_key_arr to char *chars_len = (*env)->GetArrayLength(env, j_key_arr);if (chars_len != 48) {printf("%s", "Fail to sm4 encrypt,key must be 48 bits.");exit(1);}j_key = (*env)->GetByteArrayElements(env, j_key_arr, 0);key = malloc(chars_len + 1);memset(key, 0, chars_len + 1);memcpy(key, j_key, chars_len);//j_iv_arr to char *chars_len = (*env)->GetArrayLength(env, j_iv_arr);if (chars_len != 16) {printf("%s", "Fail to sm4 encrypt,iv must be 16 bits.");exit(1);}j_iv = (*env)->GetByteArrayElements(env, j_iv_arr, 0);iv = malloc(chars_len + 1);memset(iv, 0, chars_len + 1);memcpy(iv, j_iv, chars_len);//sm4 encryptmemcpy(sms4_key.rk, key, 32);memcpy(sm4_iv, key + 16, 16);sms4_set_encrypt_key(&sms4_key, sm4_iv);sms4_cbc_encrypt(plain_text, enc_text, 64, (sms4_key_t *) sms4_key.rk, sm4_iv, 1);ret = (*env)->NewByteArray(env, 64);(*env)->SetByteArrayRegion(env, ret, 0, 64, (jbyte*)enc_text);//free memoryfree(key);free(iv);free(plain_text);(*env)->ReleaseByteArrayElements(env, j_iv_arr, j_iv, 0);(*env)->ReleaseByteArrayElements(env, j_key_arr, j_key, 0);(*env)->ReleaseByteArrayElements(env, j_plain_text_arr, j_plain_text, 0);return ret; }JNIEXPORT jbyteArray JNICALL Java_com_openailab_oascloud_security_jni_cloud_CloudAuthJNI_sm4Decrypt(JNIEnv *env, jobject obj, jbyteArray j_enc_text_arr, jbyteArray j_key_arr, jbyteArray j_iv_arr) {unsigned char dec_text[1024] = { 0 };jbyteArray ret = NULL;jbyte *j_enc_text = NULL;jbyte *j_key = NULL;jbyte *j_iv = NULL;sms4_key_t sms4_key;int enc_len = 0;int chars_len = 0;unsigned char *enc_text = { 0 };unsigned char *key = { 0 };unsigned char *iv = { 0 };//j_plain_text_arr to char *j_enc_text = (*env)->GetByteArrayElements(env, j_enc_text_arr, 0);chars_len = (*env)->GetArrayLength(env, j_enc_text_arr);enc_text = malloc(chars_len + 1);memset(enc_text, 0, chars_len + 1);memcpy(enc_text, j_enc_text, chars_len);//j_key_arr to char *chars_len = (*env)->GetArrayLength(env, j_key_arr);if (chars_len != 48) {printf("%s", "Fail to sm4 decrypt,key must be 48 bits.");exit(1);}j_key = (*env)->GetByteArrayElements(env, j_key_arr, 0);key = malloc(chars_len + 1);memset(key, 0, chars_len + 1);memcpy(key, j_key, chars_len);//j_iv_arr to char *chars_len = (*env)->GetArrayLength(env, j_iv_arr);if (chars_len != 16) {printf("%s", "Fail to sm4 decrypt,iv must be 16 bits.");exit(1);}j_iv = (*env)->GetByteArrayElements(env, j_iv_arr, 0);iv = malloc(chars_len + 1);memset(iv, 0, chars_len + 1);memcpy(iv, j_iv, chars_len);//sm4 decrypmemcpy(sms4_key.rk, key, 32);sms4_set_decrypt_key(&sms4_key, iv);sms4_cbc_encrypt(enc_text, dec_text, 64, sms4_key.rk, iv, 0);ret = (*env)->NewByteArray(env, strlen(dec_text));(*env)->SetByteArrayRegion(env, ret, 0, strlen(dec_text), (jbyte*)dec_text);//free memoryfree(key);free(iv);free(enc_text);(*env)->ReleaseByteArrayElements(env, j_iv_arr, j_iv, 0);(*env)->ReleaseByteArrayElements(env, j_key_arr, j_key, 0);(*env)->ReleaseByteArrayElements(env, j_enc_text_arr, j_enc_text, 0);return ret; }

注意:頭文件的方法名需要與Java文件的全限定名一致,Java代碼目錄結構如下:

到此JNI在實際項目中的使用方法就介紹完了。

總結

以上是生活随笔為你收集整理的JNI 在实际项目中的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

超碰国产人人 | 亚洲国产剧情av | 麻豆精品视频在线观看免费 | 视频在线精品 | 黄色免费网站大全 | 色天天中文 | 国产成人精品999在线观看 | 国产精品久久久久免费观看 | 中文字幕 在线看 | 日韩激情视频 | 在线免费成人 | 中文字幕日韩伦理 | 天天操夜夜逼 | 久久夜色精品国产欧美一区麻豆 | 亚洲精选在线观看 | 精品国产一区二区三区在线观看 | avwww在线观看 | 精品国产区在线 | 欧美日韩高清一区二区三区 | 又污又黄网站 | 人人干狠狠操 | 欧美日韩国产精品一区二区三区 | 欧美日本啪啪无遮挡网站 | 国产一区二区免费在线观看 | 黄色一级性片 | 日韩精品免费一线在线观看 | 中文在线a∨在线 | 成人午夜精品福利免费 | 欧美少妇bbwhd | 国产一级片免费视频 | 高清av影院 | 欧美成天堂网地址 | 久久99国产精品自在自在app | 午夜精品久久久久久久久久久 | 国内外激情视频 | 91完整版在线观看 | 亚洲视频在线观看网站 | 亚洲精品18日本一区app | 天天操天天操天天操天天操天天操天天操 | 国产精品1区2区3区 久久免费视频7 | 五月婷婷在线视频观看 | 99精品国产一区二区三区不卡 | 国产午夜剧场 | 狠狠操.com | 国产精品99久久久久久宅男 | 日韩免费网站 | 69国产精品视频免费观看 | wwwwww国产 | 欧美日韩视频观看 | 日韩激情一二三区 | 天天弄天天操 | 叶爱av在线 | 五月婷婷在线播放 | 香蕉久草 | 国产探花 | 亚洲免费视频观看 | 中文字幕 欧美性 | 欧美成人黄色片 | 麻花天美星空视频 | 国产精品久久久久久久久久久杏吧 | 中文字幕在线免费观看视频 | 日韩av免费在线看 | 色偷偷中文字幕 | 96精品高清视频在线观看软件特色 | 免费在线成人 | 特级毛片在线 | 91视频高清| 国产欧美精品在线观看 | 欧美日韩国产亚洲乱码字幕 | 在线视频亚洲 | 欧美精品国产综合久久 | 国产色综合天天综合网 | 亚洲最新精品 | 久久精品综合网 | 欧美一级性生活视频 | 免费男女羞羞的视频网站中文字幕 | 高清美女视频 | 婷婷丁香av | 在线电影 一区 | 午夜精品一区二区三区在线 | 久草在线综合网 | 久久av免费电影 | 国产在线观看午夜 | 91精品免费视频 | 精品国产诱惑 | 色狠狠久久av五月综合 | 国产精品 视频 | 日韩av一区二区三区四区 | 欧美一区二区三区激情视频 | 黄色的视频网站 | 97人人模人人爽人人喊网 | 国偷自产视频一区二区久 | 国产99久久久久久免费看 | 久久精品欧美日韩精品 | 欧美性网站 | 成人午夜精品久久久久久久3d | 亚洲精品综合欧美二区变态 | av资源免费看 | 天天躁日日躁狠狠躁 | 日本爱爱片 | 国产韩国日本高清视频 | 麻豆精品视频在线观看免费 | 亚洲精品美女免费 | 国产美女主播精品一区二区三区 | 亚洲高清视频在线播放 | 91视频免费看片 | 制服丝袜成人在线 | 天天做日日做天天爽视频免费 | 波多野结衣在线观看视频 | 亚洲精品综合一区二区 | av网址在线播放 | 久亚洲| 久久99精品久久久久久清纯直播 | 97日日 | 精品女同一区二区三区在线观看 | 亚洲精品色 | a久久免费视频 | 在线播放视频一区 | 国产一区二区在线免费观看 | www久久精品 | 欧美在线视频一区二区 | 中国一级片在线 | 国产一区二区不卡视频 | 97超碰精品| 国产精品久久久久永久免费看 | 在线黄频| 免费看av片网站 | 亚洲精品国精品久久99热一 | 久久在线精品视频 | 成片免费 | 欧美久久久久久久久中文字幕 | 亚洲欧美日韩国产 | 免费看精品久久片 | 成人免费在线观看av | 西西444www大胆高清图片 | 日本精油按摩3 | 午夜国产成人 | 欧美精品久久久久久久久老牛影院 | 99在线免费观看视频 | 国产精品美女久久久免费 | 国产亚洲资源 | 久久99久久99精品免观看软件 | 69视频国产 | 免费一级黄色 | 天天操欧美 | 欧美日韩国产亚洲乱码字幕 | 91在线精品秘密一区二区 | 国产精品美女久久久久久久久 | 亚洲国产日韩一区 | 国产第一页在线观看 | 久久免费成人 | 99久久影院 | 久久国内精品99久久6app | 久草爱视频 | 九九色综合 | 国产尤物在线 | 国产视频 久久久 | 亚洲电影成人 | 欧美日韩中文字幕视频 | 黄色一级片视频 | 特级大胆西西4444www | 亚洲国产精品成人va在线观看 | 麻豆国产精品一区二区三区 | 九九热在线播放 | 免费久久视频 | 国产手机在线观看视频 | 亚洲欧美日韩国产一区二区三区 | 免费情缘| 在线视频国产区 | 免费特级黄色片 | 最近日本mv字幕免费观看 | 国产成人综 | 91漂亮少妇露脸在线播放 | 久久综合久久综合这里只有精品 | 亚洲激情校园春色 | 欧美另类色图 | 久草在线看片 | 人人澡人人添人人爽一区二区 | 国产精品99久久久久久久久久久久 | 国产精品99久久久久久人免费 | 日韩在线免费播放 | 亚洲专区欧美专区 | 亚洲一级特黄 | 91香蕉视频黄 | 97精品超碰一区二区三区 | 国内精品久久久精品电影院 | 天堂在线v| www免费黄色 | 欧美亚洲成人免费 | 久久久久免费网 | 免费在线成人 | 国产亚洲精品福利 | 国产精品亚洲综合久久 | 日韩欧三级 | 国产精品va在线观看入 | 久久九九国产精品 | 中文字幕4 | 99久久婷婷国产一区二区三区 | 免费在线观看视频一区 | 亚a在线 | 色综合久久88色综合天天免费 | av在线超碰 | 欧美一区免费观看 | 日韩免费视频播放 | 国产精品一区二区三区在线播放 | 欧美精品一二三 | 成 人 黄 色 视频免费播放 | 亚洲日本一区二区在线 | 天天操天天吃 | www.福利| 黄色一级在线观看 | 天天曰天天射 | 久久成人麻豆午夜电影 | 免费黄色特级片 | 又黄又爽的免费高潮视频 | 日韩三级视频在线观看 | 一区二区 不卡 | 天天干天天玩天天操 | www黄色com| 日韩中文字幕第一页 | 欧美日韩国产二区 | 国内精品久久久 | 国产午夜精品一区二区三区 | 日韩亚洲在线视频 | www..com毛片 | 天天干夜夜擦 | 蜜臀久久99精品久久久久久网站 | 91看片淫黄大片91 | 天天操天天干天天插 | 免费日p视频 | 免费三级av | 久草在线视频新 | 中文字幕乱码视频 | 日日夜夜中文字幕 | 国产亚洲精品久久久久秋 | 国产亚洲精品女人久久久久久 | 韩日电影在线观看 | av电影在线播放 | 亚洲精品av中文字幕在线在线 | 黄色影院在线播放 | 中文字幕在线播放一区二区 | av中文字幕日韩 | 精品欧美一区二区精品久久 | 色综合久久精品 | 91久久精品一区 | 99久久999久久久精玫瑰 | 成人理论电影 | 久久精品国产亚洲 | 久久久久久久99精品免费观看 | 国产精品毛片一区视频 | 免费成人av在线 | 在线精品视频在线观看高清 | 久久久久久福利 | 狠狠色狠狠色合久久伊人 | 日韩午夜一级片 | 国产高清视频免费观看 | 欧美一级片在线播放 | 亚洲国产免费看 | 久久久视频在线 | 很污的网站 | 亚洲欧美综合精品久久成人 | 视频二区在线 | 99婷婷狠狠成为人免费视频 | 久久国产经典视频 | 国产精品久久电影网 | 久久短视频 | 99久久精品国产一区二区三区 | 婷婷在线视频观看 | 久久视频在线视频 | 97福利视频 | 国产欧美综合在线观看 | www.一区二区三区 | 久久精品日本啪啪涩涩 | 欧美在线视频a | av在线精品 | 欧美片一区二区三区 | 天天操天天干天天插 | 亚洲欧美日韩国产一区二区三区 | 成人在线播放视频 | 国产免码va在线观看免费 | 国产成人精品一区二区三区 | 2019天天干天天色 | 中文字幕在线观看视频免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精彩视频 | 又色又爽又激情的59视频 | 91传媒在线看| 国产成人三级三级三级97 | av怡红院 | 成人午夜网 | 国产手机视频在线观看 | 天天天色| 欧美激情视频三区 | 国产精品videoxxxx | 久艹在线观看视频 | 成人福利av | 在线观看免费中文字幕 | 日本xxxxav | 欧美日本啪啪无遮挡网站 | 国产精品久久电影观看 | 一区二区高清在线 | 精品特级毛片 | 99热这里只有精品国产首页 | 国产区欧美 | 五月天亚洲综合 | 亚洲三级在线免费观看 | 久久天堂精品视频 | 国产精品久久久久久久久久久免费 | 日韩欧美视频在线观看免费 | 夜夜爽88888免费视频4848 | 久久精品牌麻豆国产大山 | 日韩剧情 | 99在线热播| 国语麻豆| 91视频免费国产 | 黄色官网在线观看 | 国产青青青 | 国产在线一区二区三区播放 | 国产亚洲精品久久久久久移动网络 | 国产淫a| 亚洲va韩国va欧美va精四季 | 91精选在线 | www.国产精品| 免费观看一区二区 | 亚洲精品麻豆视频 | 九热在线 | 成人在线电影观看 | 成年人视频在线免费播放 | 日韩精品久久一区二区 | 亚洲日本三级 | 午夜美女av | 91精品国产综合久久福利 | 91在线中文 | 亚洲久在线 | 奇米影视999 | 日韩在线欧美在线 | 一色屋精品视频在线观看 | 欧美激情第八页 | 成人免费观看完整版电影 | 久久国产精品二国产精品中国洋人 | 天天干天天搞天天射 | 天天操天| 国产色女人 | 天天色棕合合合合合合 | 成人黄色小说视频 | 特级片免费看 | 中文字幕一区二区三区精华液 | 免费a视频在线 | 国产精品免费视频一区二区 | 成人精品电影 | 国产精品福利在线播放 | av大全在线播放 | 天天综合视频在线观看 | 久久久久美女 | 欧美性色综合网站 | 久久精品99国产精品酒店日本 | 91精品免费在线观看 | 欧美一级久久久久 | 一区二区三区电影 | 婷婷色在线视频 | 99色在线观看视频 | 国产精品成人aaaaa网站 | 国产麻豆精品免费视频 | 波多野结衣亚洲一区二区 | 中国成人一区 | 国产午夜三级一区二区三 | 又紧又大又爽精品一区二区 | 91福利视频在线 | 欧美性爽爽 | 免费在线国产精品 | 日韩一区二区三区高清免费看看 | 久久久久欠精品国产毛片国产毛生 | 色婷婷激情综合 | 88av色| 日本久久视频 | 91精品在线视频观看 | 久久99久久99精品中文字幕 | 日韩精品一区二区三区中文字幕 | 视频直播国产精品 | 97综合网 | 日韩精品极品视频 | 黄色特一级片 | 中文字幕婷婷 | 欧美国产91 | 日本三级不卡 | 毛片www | 一区二区精品在线 | 一二区精品 | 麻豆精品在线视频 | 中文字幕频道 | 中文字幕精品一区二区三区电影 | 久久国产精品二国产精品中国洋人 | 久久久久久久久免费视频 | 在线草 | 香蕉视频在线免费看 | 久久国产美女视频 | 久久刺激视频 | 五月婷婷欧美视频 | www.天天射| 天天操福利视频 | 久久久久久久久久久综合 | 开心激情五月网 | 五月开心激情网 | 伊人伊成久久人综合网小说 | 久久国产综合视频 | 亚洲国产经典视频 | 伊人午夜 | 精品国内自产拍在线观看视频 | 99久久久国产精品免费观看 | 国产精品白浆视频 | 国产精品成人免费一区久久羞羞 | 国产精品1区2区 | 久久99亚洲精品久久久久 | 九九九九热精品免费视频点播观看 | 午夜av一区二区三区 | 成人91免费视频 | 国产69久久久 | 久久精品4 | 国产精品一区二区久久国产 | 欧美一级乱黄 | 免费中文字幕在线观看 | 免费国产黄线在线观看视频 | 日韩精品免费在线观看视频 | 婷婷5月激情5月 | 91亚洲精品久久久蜜桃网站 | 久久久在线 | 99 色| 日韩在线观看视频中文字幕 | 中文字幕免费观看全部电影 | 黄污视频网站大全 | 日韩有码网站 | 成人黄色片免费看 | 国产在线观看,日本 | 99视频久久| 欧美日韩精品影院 | 超碰国产在线观看 | 免费网站在线 | 久久这里只有精品23 | 综合久久久 | 久保带人 | 狠狠色婷婷丁香六月 | 免费中文字幕在线观看 | 国产又粗又猛又黄又爽的视频 | 91传媒在线看| 又色又爽又黄 | 天天干婷婷 | 国产成人精品久久久久 | 日本中文字幕免费观看 | 亚洲九九九在线观看 | 国产资源精品 | 一区二区三区电影大全 | 丁香婷婷自拍 | 中文字幕黄色网 | 丁香五月网久久综合 | 日产乱码一二三区别在线 | 久久综合亚洲鲁鲁五月久久 | 国产四虎在线 | 国产精品视频永久免费播放 | 久久永久视频 | a天堂免费 | 狠狠干综合网 | 天堂av一区二区 | 国内精品中文字幕 | 成人欧美在线 | 在线99| av不卡在线看 | 天天插狠狠插 | av片中文| 色偷偷88欧美精品久久久 | 人人干人人搞 | 欧美人体xx | 在线看国产日韩 | 日韩精品一区二区三区高清免费 | 日日干天天插 | 国产精品免费在线观看视频 | 婷婷在线视频观看 | www日| 亚洲黄a | 久久超碰在线 | 探花在线观看 | 久久人人爽人人爽 | 91视频免费观看 | 国产精品黑丝在线观看 | 国产成人一级电影 | 草在线 | 国产精品99精品 | 麻豆传媒在线免费看 | 在线观看黄色av | 久久国产精彩视频 | 99视频在线观看免费 | 久9在线| 国产aa精品 | 久久久精品 一区二区三区 国产99视频在线观看 | 日韩城人在线 | 日韩黄色一级电影 | 成片免费观看视频大全 | 在线观看成人毛片 | 精品女同一区二区三区在线观看 | 成人免费大片黄在线播放 | 免费网址在线播放 | 不卡的av在线播放 | av韩国在线 | 久草视频国产 | 911亚洲精品第一 | 五月婷婷六月丁香 | 国产色婷婷精品综合在线手机播放 | 国产精品区二区三区日本 | 久久tv | 69精品视频 | 在线观看中文字幕dvd播放 | 成人蜜桃网 | 婷婷五月情| www.99av| 亚洲国产成人高清精品 | 国产香蕉av | 久久艹久久 | 久久久亚洲麻豆日韩精品一区三区 | 麻豆一区二区三区视频 | 久久久www免费电影网 | 久久久www免费电影网 | 91福利视频一区 | 又黄又爽免费视频 | 久久综合色天天久久综合图片 | 国产精品久久久久久久久久久久午 | www.97色.com | 中文字幕一区二区在线播放 | 久草在线这里只有精品 | 在线观看中文字幕av | 精品国产aⅴ麻豆 | 一区中文字幕在线观看 | 欧美一区二区在线免费观看 | 黄色片网站大全 | 国产九色在线播放九色 | 六月丁香六月婷婷 | 97碰碰视频| 天堂av观看| 精品一区精品二区 | 久草视频播放 | www.久久色 | 尤物一区二区三区 | 亚洲精品456在线播放 | 免费中文字幕视频 | 中文字幕电影网 | 国产高清视频在线免费观看 | 国产精品毛片一区 | 国产999精品 | 欧美精品一区二区蜜臀亚洲 | av在线色| 国产福利久久 | 成人国产精品入口 | 国产黄a三级三级三级三级三级 | 免费黄色小网站 | 99久久一区 | 国产二区视频在线观看 | 黄色h在线观看 | 久久国色夜色精品国产 | 在线免费观看的av | 波多野结衣电影一区 | 99免费精品 | av久久在线 | 久久99精品久久久久蜜臀 | 久久一视频 | 一级黄色片网站 | 区一区二在线 | 欧美在线观看视频 | 成人av在线电影 | 天天摸天天舔天天操 | 一区三区视频 | 亚洲精品国产精品国产 | 999视频在线播放 | 国产99久久精品 | 色诱亚洲精品久久久久久 | 久久精品国产精品亚洲精品 | www视频免费在线观看 | 国产在线观看a | 精品视频成人 | 国产 欧美 在线 | 久久久久综合网 | 探花视频免费在线观看 | 亚洲日本欧美 | 国产精品一区久久久久 | 黄色免费电影网站 | 日韩免费视频线观看 | 日韩在线播放视频 | 97免费公开视频 | 久久久99久久 | 国产小视频你懂的 | 久久久久一区二区三区四区 | 欧美日韩三区二区 | 日韩欧美综合在线视频 | 在线成人免费电影 | 免费在线成人av电影 | 久久热首页| 正在播放 久久 | 久久久网 | 国产精品久久久久久久久久 | 极品国产91在线网站 | 久久精品欧美 | 久草精品视频在线看网站免费 | 毛片基地黄久久久久久天堂 | 在线 成人| 色婷婷狠狠操 | 亚洲www天堂com | 色综合天天色综合 | 亚洲最大av在线播放 | 一区二区三区电影在线播 | 国产特级毛片aaaaaa毛片 | 波多野结衣视频一区 | 日本久久精品 | se视频网址 | 欧美日韩不卡在线视频 | av中文字幕在线看 | 93久久精品日日躁夜夜躁欧美 | 久久精品精品 | 久久久久久久久久久久国产精品 | 色91在线 | 伊人影院在线观看 | 五月婷婷久草 | 久久综合99| 成人超碰在线 | 免费色视频网站 | 午夜视频免费在线观看 | 久久国产成人午夜av影院潦草 | 国产亚洲视频在线免费观看 | 日韩免费网站 | 亚洲精品国产精品久久99 | 久久久久久久影院 | 福利一区在线视频 | 天天操天天射天天爱 | 处女av在线 | 激情五月激情综合网 | 成人黄大片视频在线观看 | 国产精品久久久久久久久久久久久久 | 激情丁香月| 欧美韩国日本在线观看 | 亚洲精品视频免费看 | www.久久色.com | 久久视频国产 | av福利超碰网站 | 国产高清av | 婷婷丁香九月 | 在线一区观看 | 亚洲精品视频在线观看免费视频 | 丁香五婷 | 欧美一区影院 | 婷婷 综合 色 | 不卡国产视频 | 91人人插| 成人小视频在线观看免费 | 91久久久久久久一区二区 | 在线观看视频黄色 | 五月天伊人 | 麻豆视频网址 | 成人免费在线播放视频 | 91成年人在线观看 | 欧美日韩在线观看一区二区三区 | 91精品国产三级a在线观看 | 欧美91精品久久久久国产性生爱 | 久久免费毛片视频 | 日韩在线观看视频一区二区三区 | 这里有精品在线视频 | 成人污视频在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 国产欧美日韩一区 | 国产成人久久精品77777综合 | 亚洲欧洲国产视频 | 免费a v视频 | 在线国产中文字幕 | 欧美激情视频一区二区三区 | 久久国产精彩视频 | 91精品视频在线 | 久久久久成人精品免费播放动漫 | 99久久久国产精品美女 | 日韩欧美一区二区在线 | 国产精品久99 | 久久一区二区三区超碰国产精品 | 日韩av在线免费播放 | 911精品美国片911久久久 | 亚洲专区中文字幕 | 色美女在线 | 波多野结衣最新 | 免费a级黄色毛片 | 成人免费视频在线观看 | 91成人免费在线视频 | 黄色成人免费电影 | 亚洲免费公开视频 | 色吧久久 | 日韩久久在线 | 在线国产能看的 | 狠狠网站| 日韩不卡高清视频 | 中文字幕在线有码 | 大荫蒂欧美视频另类xxxx | 中文字幕免费高 | 成人午夜影院 | 国产麻豆精品一区 | 天天天天射 | 亚洲国产欧洲综合997久久, | 国语精品免费视频 | 一区二区三区中文字幕在线 | 久久视频在线观看免费 | 区一区二区三区中文字幕 | 精品美女久久久久 | 日本久久中文字幕 | 成人污视频在线观看 | 91av在线免费看 | 伊人开心激情 | 免费在线国产精品 | 亚洲精品中文字幕在线观看 | 黄色软件在线观看 | av三级av | 天天操综合网站 | 日本黄色a级大片 | 69久久99精品久久久久婷婷 | 欧美午夜精品久久久久久孕妇 | 91精品色 | 国产精品高清免费在线观看 | 日韩美女免费线视频 | 超碰97人人射妻 | 久久资源在线 | 日韩精品电影在线播放 | 91av在线免费 | 日韩免费在线 | 国产日韩一区在线 | 国产精品成人av在线 | www.xxx.性狂虐| 丁香av在线 | 一区二区中文字幕在线 | 亚洲天堂精品视频在线观看 | 色噜噜色噜噜 | 国内免费久久久久久久久久久 | 97视频人人澡人人爽 | 色婷婷在线视频 | 黄网站免费久久 | 免费看的黄色的网站 | 精品一区电影国产 | 日韩精品视频在线观看网址 | 网站免费黄 | 色丁香色婷婷 | 日韩高清一 | 久久精品视频在线播放 | 亚洲乱码在线观看 | 成人在线网站观看 | 手机在线看片日韩 | 国产少妇在线观看 | a亚洲视频 | 免费视频色| 久久国产精品99久久久久久丝袜 | 国内精品久久久久影院男同志 | www.国产视频 | 九九热在线观看视频 | 国产一区二区视频在线播放 | 免费91在线观看 | 亚洲精品啊啊啊 | 国产伦精品一区二区三区免费 | 精品福利网 | 久久99婷婷 | 亚洲资源视频 | 国产精品不卡一区 | 天天射天天干 | 久久综合综合久久综合 | 91在线国产观看 | 国产精品www | 日韩在线观看视频中文字幕 | 亚洲黄电影| 日韩手机视频 | 四虎影院在线观看av | 狠狠操在线 | 黄色免费网站 | 国产午夜在线观看 | 免费福利在线播放 | 亚洲天堂视频在线 | 亚洲精品久久久久久国 | 免费久久99精品国产婷婷六月 | 综合天天| 国产成人精品日本亚洲999 | 一级特黄aaa大片在线观看 | 久草国产精品 | 在线观看黄av | 国产成人精品一区二区三区在线 | 91成年人视频 | 久久久久www | 天天操天天爽天天干 | 久久一区二区三区日韩 | 国产精品久久久久久久久费观看 | 日韩专区在线观看 | 色福利网 | 久免费 | 亚洲精品www.| 国内小视频 | 日韩精品一区二区三区免费视频观看 | 天天爱天天射 | 午夜精品一区二区三区在线观看 | 在线免费成人 | 国产在线a免费观看 | 久久99在线观看 | 黄色av一级 | 草久视频在线 | 精品一区二区三区香蕉蜜桃 | 日韩免费一区二区在线观看 | 欧美一级乱黄 | 久久综合狠狠综合久久激情 | 亚洲精品久久久蜜桃直播 | 免费黄色在线播放 | 91探花系列在线播放 | 日本中文字幕久久 | 久久久久久伊人 | 精品1区2区 | 天天操天天色综合 | 成人a免费看 | 五月婷婷综合激情网 | 国产精品久久久免费 | 天天爱av导航 | 欧美一级片免费 | 久久久久久综合网天天 | 日韩亚洲在线视频 | 日韩影视精品 | 国产精品黄网站在线观看 | av大全在线| 99久热在线精品视频成人一区 | 欧美一级电影免费观看 | 高清视频一区 | 青青草久草在线 | 久久一区精品 | 国产精品亚洲成人 | 国产中文字幕精品 | 国产高清 不卡 | av一本久道久久波多野结衣 | 国产精品久久精品国产 | 天天干天天操天天操 | 日韩中字在线 | 精品999| 久久婷亚洲五月一区天天躁 | 天天操天天干天天综合网 | 久久免费激情视频 | 在线成人免费电影 | 91欧美视频网站 | 激情久久久 | 国产一区二区综合 | 91亚洲精| 96亚洲精品久久久蜜桃 | 婷婷激情小说网 | 九九日九九操 | 成人性生爱a∨ | 久久婷婷国产 | 黄色国产精品 | 中文字幕在线看片 | 免费观看一级特黄欧美大片 | 欧美人操人 | 成人在线免费看视频 | 91视频免费国产 | 香蕉视频在线播放 | 色视频成人在线观看免 | 国产不卡一区二区视频 | 中文字幕区 | 日日夜夜天天久久 | 国产精品毛片一区二区在线 | 99热精品在线观看 | 日本成人免费在线观看 | av日韩不卡 | 97超在线 | 成人av网页 | 久久免费电影网 | 日日爱影视 | 91精品视屏 | 久久不卡日韩美女 | 97超碰在线免费观看 | 狠狠狠色丁香婷婷综合激情 | 国内精品久久久久影院日本资源 | 日韩欧美一区二区不卡 | 日韩字幕在线 | 一区中文字幕在线观看 | 久久精品免费观看 | 日韩电影黄色 | av高清在线观看 | 色综合在 | 精品1区二区 | 久久一区二区三区日韩 | 国产精品1区2区 | 永久免费精品视频网站 | 久久草网站 | 看国产黄色片 | 日韩中文字幕亚洲一区二区va在线 | 操久在线| 亚av在线 | 国产精品久久久久久久久久了 | 国产精品国产三级国产aⅴ无密码 | 中文字幕在线免费播放 | 在线视频专区 | av线上免费观看 | 国产 欧美 日产久久 | 99久久精品免费看国产四区 | 91在线入口 | 久久不卡日韩美女 | 国产黄色美女 | 国产日韩精品久久 | 久久免费av | 黄色天堂在线观看 | 久久免费视频这里只有精品 | 国产精品18久久久久久久 | aⅴ精品av导航 | 亚洲一级久久 | 久草在线视频新 | 日本中文乱码卡一卡二新区 | 久草视频在线资源站 | 精品国产黄色片 | 亚洲精品日韩在线观看 | 日韩午夜精品福利 | 欧美精品乱码99久久影院 | 欧美色图一区 | 就操操久久 | 国产黄a三级 | 天天躁日日躁狠狠 | 天天干天天射天天爽 | 四虎在线观看网址 | 日日干夜夜爱 | 久草资源在线观看 | 久久99日韩 | 亚洲国产精品久久久久婷婷884 | 久久久亚洲麻豆日韩精品一区三区 | 欧美另类调教 | 九九热免费在线视频 | 丁香婷婷综合激情 | 久久久国产精品免费 | 成人国产精品免费观看 | 69精品| 国产无套精品久久久久久 | 日韩精品不卡 | 国产九色视频在线观看 | 激情丁香月| 精品国产一区二区久久 | 国产成人精品综合 | 最新日本中文字幕 | 99精品视频在线观看播放 | 国产一区二区不卡在线 | 日韩av电影一区 | 天天躁天天操 | 国产精品久久久亚洲 | 麻豆精品传媒视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 午夜精品一区二区三区在线观看 | 国产精品一区二区吃奶在线观看 | 国产91亚洲精品 | 91视频88av | 一区二区三高清 | 丁香激情综合国产 | 久久国产精品99久久久久久丝袜 | 一区二区三区三区在线 | 99久热在线精品 | 日韩电影中文字幕 | 精品国产久 | 欧美激情第八页 | 国产在线精品国自产拍影院 | 又色又爽又黄 | 久久人操| 91爱看片| 欧美成亚洲 | 黄色91免费观看 | 91精品啪在线观看国产线免费 | 婷婷久久婷婷 | 亚洲精品乱码久久久久久蜜桃欧美 | 欧美日韩视频一区二区 | 亚洲一级理论片 | 日韩网站在线免费观看 | 免费亚洲精品 | 亚洲乱码国产乱码精品天美传媒 | 国产专区视频在线观看 | 久久99国产一区二区三区 | 在线观看黄色免费视频 | 天天综合久久综合 | 麻豆视频91 | 日韩精品免费专区 | 日韩激情在线 | 欧美一级片免费观看 | 亚洲电影在线看 | 国产精品欧美 | 亚洲另类久久 | 黄网站色 | 天天操福利视频 | 色综合天天狠天天透天天伊人 | 国产aaa毛片| 国产 字幕 制服 中文 在线 | 怡春院av | 一二三区高清 | 久青草视频在线观看 | 亚洲高清激情 | 中文字幕av播放 | 久热香蕉视频 | 中文字幕人成不卡一区 | 天天·日日日干 | 国产高清绿奴videos | 日韩国产欧美在线视频 | av在线播放网址 | 五月天中文在线 | 日日干夜夜骑 | 国产精品久久久久久久久久妇女 | 97精品国自产拍在线观看 | 精品久久久久久久久亚洲 |