【C/C++】JAVA与C/C++ AES加密算法同步
来源:互联网 发布:牛肉干市场调查数据 编辑:程序博客网 时间:2024/04/29 19:32
此处我们使用的是AES的基础加密模式,即:电码本模式 ECB
JAVA代码如下:
//创建AES加密实例SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cip = Cipher.getInstance("AES/ECB/NoPadding");//算法/模式/补码方式cip.init(Cipher.ENCRYPT_MODE,skeySpec); //分块加密int black= data.length/16+1;byte[] out = new byte[black * 16];int b = 0;while(b < black){//计算偏移int offset = b * 16;//计算剩余长度int len = (data.length-16-offset) > 0 ? 16:(data.length - offset);byte[] input = new byte[16];System.arraycopy(data, offset, input, 0, len);byte[] output=cip.doFinal(input);System.arraycopy(output, 0, out,offset, 16);b++;}return out;
注意一点,AES的ECB模式加密的过程是分块的,必须我们手动实现分块的过程,在java中记得设置补码方式为NoPadding,不需要补码,否则无法和c++的同步
C/C++代码:
char* Aes(char *key,int *destLen,char *src,int srcLen){mbedtls_aes_context aes_ctx; mbedtls_aes_init( &aes_ctx ); //设置加密密钥 mbedtls_aes_setkey_enc( &aes_ctx,(unsigned char *)key, 128);//获取块的数量int block=srcLen/16+1;//动态分配内存*destLen = block*16;char *dest=new char[*destLen];//清空memset(dest,0,*destLen);//分块加密,每块16字节长度unsigned char input[16];unsigned char outout[16];int b = 0;while( b < block ){int offset = b * 16;int len = 0;if((srcLen-16-offset) > 0 ){len = 16;}else{len = srcLen-offset;}LOG(L"偏移:%d 长度:%d \n",offset,len);memset(input,0,16);memset(outout,0,16);memcpy(input,&src[offset],len);//加密mbedtls_aes_crypt_ecb( &aes_ctx, MBEDTLS_AES_ENCRYPT, input, outout ); memcpy(&dest[b*16],outout,16);b++;}Print(dest,*destLen);return dest;}
此处我们使用的是mbedtls库,不知道如何编译使用,请看我的上一篇文章。
0 1
- 【C/C++】JAVA与C/C++ AES加密算法同步
- objective-c加密算法AES
- AES加密算法(C++)
- AES加密算法源代码(c语言版)
- 基于c语言aes加密算法
- AES加密算法(c语言)
- AES加密算法C代码分析
- AES 加密算法的 C 语言实现
- AES 加密算法的 C 语言实现
- C# Andriod AES 加密算法
- JavaScript的CryptoJS AES/ECB/NoPadding加密,可与JAVA objective-c 进行同步加解密
- java + Object C AES加密
- [iOS]objective-c AES/DES/3DES等加密算法实现
- AES 128-bit ecb cbc 模式 C语言加密算法
- AES算法 java与C加解密兼容
- Java与C/C++通用的“AES/ECB/PKCS5Padding”实现
- AES-C代码实现
- C Aes 算法
- 日期工具类TimeUnit
- 从逻辑回归到SVM
- eclipse build path功能总结
- stm32f10x_startup.s的代码
- build.prop 文件的部分参数
- 【C/C++】JAVA与C/C++ AES加密算法同步
- 头文件的编写(例子:按钮中断控制LED亮灭)
- python——类型 对象 变量
- Java中static关键字用法总结
- JSP+Servlet实现登录功能.
- listview条目点击可展开(初级)
- 冒泡排序
- 08001-命名管道提供程序:无法打开与SQL Server的连接[1326]
- Java面试