主要在做 aes 加密这块,因为涉及到服务器,安卓和 iOS 的多平台,试过很多的库,同样的 aes - 256-cbc 算法,不同语言的库加密出来的结果都不一样,也不能互相解密,故想用同一个 c 语言库跨平台运行。 main 函数如下:
int m, n, i, j;
char c;
aes_context ctx;
unsigned char buf[32];
unsigned char key[32];
n=2;
memset(key,0,32);
memcpy(key,(unsigned char)"test",32);
memset(buf,0,32);
memcpy(buf,(unsigned char)"13911112222+1234567890+313787",32);
aes_set_key( &ctx, key, 128 + n*64);
aes_encrypt( &ctx, buf, buf );
printf("The encrypted data is:\n");
for(i=0;i<32;i++)
{
printf("%02x",buf[i]);
}
printf("\n");
printf("\n");
aes_set_key( &ctx, key, 128 + n * 64 );
aes_decrypt( &ctx, buf, buf );
printf("The decrypted data is:\n");
printf("%s",buf);
printf("\n");
return( 0 );
问题来了,当我在 gcc 下运行此 main 函数的结果是
The encrypted data is:
bd704722da9e2e97de83a43ab442fb693536373839302b333133373837303000
The decrypted data is:
13911112222+1234567890+31378700
当我将 main 函数改为普通函数,在 xcode 用 swift 调用 oc 去调用这个函数,在不传递任何参数进去的情况下,结果为:
The encrypted data is:
562591cb7184ec79998f411268d751423536373839302b333133373837000000
The decrypted data is:
13911112222+1234567890+313787
同样的代码,没有任何改变,为何会运行出两种结果?而且解密只能在同一个函数下解密成功,出了这个函数这个密闻就再也无法解密了,是库有问题吗?求推荐跨平台 aes 库……
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.