加密ic 及 aes256 加密app
来源:互联网 发布:mac版本photoshop破解 编辑:程序博客网 时间:2024/05/17 07:17
以前没接触过加密ic,只知道加密ic是通过i2c和mcu通讯,前段时间做的项目算是第一次用上了。
这个项目的要求是通过加密ic 既要能加密我们的固件 也要能加密配合我们固件使用的app。mcu和ic之间用i2c通讯,mcu和app之间走usb通道
我们的方案是这样的:
由加密ic方往加密ic里面写入数值不同的16个byte长度的id,拿到这个id后发送给app,app再对这个id的真伪进行校验。
如此则涉及到两次校验过程
一:加密ic和固件的校验
这个加密的原理是由我方指定一个16 Byte的key,用ic方提供的库函数通过i2c,将key传递给ic,ic读到正确的key值才能通过校验并将id值返回给我方。
在调试过程中为了达到ic方指定的通讯波形,大意了,在调用这个mcu方案的os提供的i2c读写函数时,没注意到有个值是个无符号整形数,而i2c读函数读取失败时会返回-1,原本读取失败应该再次读取,因为返回值被强转成了无符号整形数,所以总是大于-1,不会再次读取,造成波形有问题
二:利用id值对app进行加密
从ic读取到id之后,对16 Byte的id然后再掺入16 Byte的随机数,对这32Byte的数值进行aes256加密,加密之后的密文通过usb传递给app,app再对密文进行aes256解密,得到16字节的id,然后app对id进行校验
这里面引入aes256加密算法的原因是,usb通讯数据的内容很容易被第三方监测到,所以不能传递id明文,正好aes256利用指定的key可以加解密。在使用过程中发现aes256加密固定数据得出的密文是固定的于是又引入了16Byte的随机数,这样加密得到的密文随机数部分也是随机的,而aes256的一个特征是必须要完整密文才能解密出正确的原始数据。
最后贴一下加解密函数:
int mbedtls_aes_test( int verbose , unsigned char *input , unsigned char *output){ int ret = 0, i; unsigned char key[32] ; mbedtls_aes_context ctx; mbedtls_aes_init( &ctx ); memset( iv , 0, 64 );memset( output, 0, 64 );//encrypt:ret = mbedtls_aes_setkey_enc( &ctx , key , 256 );if( ret != 0 ){mbedtls_printf("\r\n mbedtls_aes_setkey_enc failed:[%d] \r\n" , ret ) ;}ret = mbedtls_aes_crypt_cbc( &ctx , MBEDTLS_AES_ENCRYPT , 64 , iv , input , output );if( ret != 0 ){mbedtls_printf("\r\n mbedtls_aes_crypt_cbc failed:[%d] \r\n" , ret ) ;goto exit;}//decrypt: ret = mbedtls_aes_setkey_dec( &ctx , key , 256 );if( ret != 0 ){mbedtls_printf("\r\n mbedtls_aes_setkey_dec failed:[%d] \r\n" , ret ) ;goto exit;}memset( iv , 0, 64 ); ret = mbedtls_aes_crypt_cbc( &ctx , MBEDTLS_AES_DECRYPT , 64 , iv, output , tmp );if( ret != 0 ){mbedtls_printf("\r\n mbedtls_aes_crypt_cbc failed:[%d] \r\n" , ret ) ;goto exit;} mbedtls_printf("decrypt str :\n") ;for(i=0 ; i<16 ; i++){mbedtls_printf("0x%02x " , tmp[i]) ;}mbedtls_printf("\r\n\n") ; ret = 0;exit: mbedtls_aes_free( &ctx ); return( ret );}
- 加密ic 及 aes256 加密app
- JAVA下AES256加密
- Android中的AES256加密
- AES256加密方案
- Java AES256加密解密实现
- Java AES256加密解密实现
- Aes256的CBC模式加密
- Android中AES256加密的实现
- AES128、AES256加密 在iOS上实现
- C#之AES256位加密解密
- 用Java进行AES256-ECB-PKCS7Padding加密
- 用Java进行AES256-ECB-PKCS7Padding加密
- C#之AES256位加密解密
- IOS 加密(其中包括AES256、MD5)
- 加密算法AES256的ECB-PKCS7Padding加密
- 高端加密IC开发常见问题
- 在java项目中使用AES256 CBC加密
- iOS AES256/RSA/DES/MD5/sha-1 (加密/解密)
- 初识jsp之登录—登录成功—登录失败页面
- 初识Struts 2
- Cloud Computing(4)_Basic MapReduce Algorithm Design_Computing Relative Frequencies&Secondary Sorting
- freebasic fbc 运行权限问题
- 在Java中动态传参调用Python脚本
- 加密ic 及 aes256 加密app
- 思维导图使用介绍
- 怎样使用android创建一个手机信息页面
- Linux内核分析(三)GDB调试工具分析Linux内核启动
- PAT L1-030. 一帮一 数组标记下标啊啊啊啊啊啊
- Android 绘制手势路线制作图画板并把View保存为图片
- 用户 'IIS APPPOOL\admin' 登录失败。 原因: 基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误
- 算法训练 关联矩阵
- 练习五1002不满足条件的三位数