C语言中的Android-AES
我想在PC(Windows7,64位)上加密我的文件,然后在Android上解密。C语言中的Android-AES,android,c,aes,Android,C,Aes,我想在PC(Windows7,64位)上加密我的文件,然后在Android上解密。 我使用此算法加密文件。 我在PC上加密文件,并将其推送到SD卡。 不幸的是,当我试图在Android上解密它们时, 结果不同, 文件完全无法读取 我的代码怎么了? jbyteArray Java_com_example_hellojni_HelloJni_decrypt(JNIEnv* env, jobject thiz, jstring fileName) { ...... /* re
我使用此算法加密文件。
我在PC上加密文件,并将其推送到SD卡。
不幸的是,当我试图在Android上解密它们时,
结果不同,
文件完全无法读取
我的代码怎么了?
jbyteArray Java_com_example_hellojni_HelloJni_decrypt(JNIEnv* env, jobject thiz, jstring fileName) {
......
/* read the file into the buffer */
size_t result = fread (buffer_in, 1, file_size, fin);
if (result!=file_size) { fputs("Reading error", stderr); exit(3); } /* end if */
fclose(fin);
/* decrypt file */
aes_context ctx[1];
aes_set_key(key, 16, ctx);
long i;
for (i=0; i<num_block; i++) {
long begin = i*16;
char *block = copyBlock(buffer_in, file_size, begin, 16), /* copy buffer_in[begin] ~ buffer_in[begin+16-1] to block[] */
*tmp = (char*)malloc(sizeof(char)*16);
aes_decrypt(block, tmp, ctx);
fillBuffer(buffer_out, out_size, tmp, begin, 16); /* copy tmp[] to buffer_out[begin] ~ buffer_out[begin+16-1] */
free(tmp);
free(block);
} /* end for */
......
} /* end Java_com_example_hellojni_HelloJni_decrypt() */
jbyteArray Java_com_示例_hellojni_hellojni_decrypt(JNIEnv*env,jobject thiz,jstring文件名){
......
/*将文件读入缓冲区*/
大小\u t结果=fread(缓冲区\u in,1,文件大小,fin);
如果(结果!=文件大小){fputs(“读取错误”,stderr);退出(3);}/*如果结束*/
财务总监(财务);
/*解密文件*/
aes_上下文ctx[1];
aes设置键(键,16,ctx);
龙我;
对于(i=0;iksch[cc-4];
t1=ctx->ksch[cc-3];
t2=ctx->ksch[cc-2];
t3=ctx->ksch[cc-1];
.......
}/*结束*/
返回0;
}/*结束aes_设置_键()*/
但是为什么?!迫切需要帮助!一般来说,您不应该尝试自己实现AES(或任何其他加密算法)(了解其工作原理的其他方法)-将已知库用于生产目的 对于Java(您在这里使用的是JNI,不是吗?),请使用JRE附带的加密API(javax.crypto)。 同样的API也适用于Android(引擎附带的API或BouncyCastle变体) 然后,确保您正在使用
- 分组密码的操作模式相同(例如ECB(不推荐)、CBC、CTR、CFB、OFB)。 我不知道你的C实现使用哪种模式,也许是ECB。我想Android的默认模式是CBC
- 用于加密和解密的相同密钥
return_type aes_set_key( const unsigned char key[], length_type keylen, aes_context ctx[1] ) {
......
for( cc = keylen, rc = 1; cc < hi; cc += 4 ) {
uint_8t tt, t0, t1, t2, t3;
/* difference begins here */
t0 = ctx->ksch[cc - 4];
t1 = ctx->ksch[cc - 3];
t2 = ctx->ksch[cc - 2];
t3 = ctx->ksch[cc - 1];
.......
} /* end for */
return 0;
} /* end aes_set_key() */