一个JNI运行出错的问题,急!!!!!!!! 明显是dll代码执行了非法的访问,把dll的代码贴出来看看。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // MAC.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include "des.h"/* DO NOT EDIT THIS FILE - it is machine generated */#include "jni.h"/* Header for class MAC */#ifndef _Included_MAC#define _Included_MAC#ifdef __cplusplusextern "C" {#endif/* * Class: MAC * Method: Mac * Signature: ([B[B[B[B[BI)V */JNIEXPORT void JNICALL Java_MAC_Mac (JNIEnv *env, jclass cl, jbyteArray data, jbyteArray KC, jbyteArray Gene1, jbyteArray Gene2, jbyteArray Mac, jint len){ jbyte *b_data = env->GetByteArrayElements(data, JNI_FALSE); jbyte *b_kc = env->GetByteArrayElements(KC, JNI_FALSE); jbyte *b_gene1 = env->GetByteArrayElements(Gene1, JNI_FALSE); jbyte *b_gene2 = env->GetByteArrayElements(Gene2, JNI_FALSE); jbyte *b_mac = env->GetByteArrayElements(Mac, JNI_FALSE); unsigned char buff[255]; memset(buff,0x00,255); memcpy(buff,b_data,len); // 1、补位 if(len%8) { for(int i=0;i<8-len%8;i++) buff[len+i] = 0x20; len = len + 8 - len%8; } unsigned char key[16],tempkey[8]; memcpy(tempkey,b_gene1,8); tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0); memcpy(key,tempkey,8); memcpy(tempkey,b_gene1,8); for(int i=0;i<8;i++) tempkey[i] = ~tempkey[i]; tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0); memcpy(key+8,tempkey,8); memcpy(b_kc,key,16); memcpy(tempkey,b_gene2,8); tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0); memcpy(key,tempkey,8); memcpy(tempkey,b_gene2,8); for(int m=0;m<8;m++) tempkey[m] = ~tempkey[m]; tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0); memcpy(key+8,tempkey,8); memcpy(b_kc,key,16); // 3、进行MAC计算 unsigned char sourceaddr[8]; unsigned char targetaddr[8]; memset(sourceaddr,0x00,8); for( int j = 0; j < len; j += 8 ) { memcpy(targetaddr,buff+j,8); for (int i = 0; i < 8; i ++) /* 求异或 */ sourceaddr[i] ^= targetaddr[i]; des(sourceaddr,(unsigned char*)b_kc,0); //des加密 } memcpy(b_mac,sourceaddr,4); env->ReleaseByteArrayElements(data , ( jbyte *)b_data,0); env->ReleaseByteArrayElements( KC, ( jbyte *)b_kc,0); env->ReleaseByteArrayElements( Gene1, ( jbyte *)b_gene1,0); env->ReleaseByteArrayElements( Gene2, ( jbyte *)b_gene2,0); env->ReleaseByteArrayElements( Mac, ( jbyte *)b_mac,0);}#ifdef __cplusplus}#endif#endifBOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ return TRUE;} tomcat + jsp 项目,如何设置把url中jsp 字眼隐藏? 利用JNI 调用MessageBox 只闻其声不见其形 菜单热键的问题 矛盾的思路,矛盾的方法,大家帮我分析一下好吗?50分 哪儿错了???为什么抛出了NullPointerException??? 关于内部类的构造方法的问题 "weblogic的资料是应用服务器当中最全的“---请大家推荐一些比较权威的参考资料,谢谢!80分! 怎样让java应用程序独立运行? 谁直到这是怎么回事 怎么除去JFrame窗口的标题栏?? 算是文件加密的问题吧!(急!!!) 一个简单问题,送分求救!!!!!!!!!!!!!!!!!!!!!
//#include "stdafx.h"
#include "des.h"/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class MAC */#ifndef _Included_MAC
#define _Included_MAC
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: MAC
* Method: Mac
* Signature: ([B[B[B[B[BI)V
*/
JNIEXPORT void JNICALL Java_MAC_Mac
(JNIEnv *env, jclass cl, jbyteArray data, jbyteArray KC, jbyteArray Gene1, jbyteArray Gene2, jbyteArray Mac, jint len)
{
jbyte *b_data = env->GetByteArrayElements(data, JNI_FALSE);
jbyte *b_kc = env->GetByteArrayElements(KC, JNI_FALSE);
jbyte *b_gene1 = env->GetByteArrayElements(Gene1, JNI_FALSE);
jbyte *b_gene2 = env->GetByteArrayElements(Gene2, JNI_FALSE);
jbyte *b_mac = env->GetByteArrayElements(Mac, JNI_FALSE);
unsigned char buff[255];
memset(buff,0x00,255);
memcpy(buff,b_data,len);
// 1、补位
if(len%8)
{
for(int i=0;i<8-len%8;i++)
buff[len+i] = 0x20;
len = len + 8 - len%8;
}
unsigned char key[16],tempkey[8];
memcpy(tempkey,b_gene1,8);
tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0);
memcpy(key,tempkey,8);
memcpy(tempkey,b_gene1,8);
for(int i=0;i<8;i++)
tempkey[i] = ~tempkey[i];
tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0);
memcpy(key+8,tempkey,8);
memcpy(b_kc,key,16);
memcpy(tempkey,b_gene2,8);
tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0);
memcpy(key,tempkey,8);
memcpy(tempkey,b_gene2,8);
for(int m=0;m<8;m++)
tempkey[m] = ~tempkey[m];
tri_des((unsigned char*)tempkey,(unsigned char*)b_kc,(unsigned char*)b_kc+8,0);
memcpy(key+8,tempkey,8);
memcpy(b_kc,key,16);
// 3、进行MAC计算
unsigned char sourceaddr[8];
unsigned char targetaddr[8];
memset(sourceaddr,0x00,8);
for( int j = 0; j < len; j += 8 )
{
memcpy(targetaddr,buff+j,8);
for (int i = 0; i < 8; i ++) /* 求异或 */
sourceaddr[i] ^= targetaddr[i];
des(sourceaddr,(unsigned char*)b_kc,0); //des加密
}
memcpy(b_mac,sourceaddr,4);
env->ReleaseByteArrayElements(data , ( jbyte *)b_data,0);
env->ReleaseByteArrayElements( KC, ( jbyte *)b_kc,0);
env->ReleaseByteArrayElements( Gene1, ( jbyte *)b_gene1,0);
env->ReleaseByteArrayElements( Gene2, ( jbyte *)b_gene2,0);
env->ReleaseByteArrayElements( Mac, ( jbyte *)b_mac,0);
}#ifdef __cplusplus
}
#endif
#endifBOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}