金牌会员
 
- 积分
- 2357
- 金钱
- 2357
- 注册时间
- 2019-10-29
- 在线时间
- 380 小时
|
1金钱
本帖最后由 chenyuan 于 2020-7-29 16:04 编辑
- /*
- 函数功能:进行加密、解密
- 参数 :
- intbuff:需要加密/解密的数据
- len:需要加密/解密的长度
- key:秘钥
- lenkey:秘钥长度
- outbuff:进行加密/解密后的数据
- */
- void En_Dis_Code(uint8_t *intbuff,uint8_t len,uint8_t *key,uint8_t lenkey,uint8_t *outbuff)
- {
- uint8_t i;
- for(i=0;i<len;i++)
- {
- outbuff[i]=intbuff[i]^key[i%lenkey];
- }
- }
复制代码
在F103中执行这行代码 outbuff=intbuff^key[i%lenkey];,我通过引脚在这行代码前后翻转,测出时间大概是500多ns,但是在F072中执行这行代码大概要11us,这差距也太大了吧!!
F103是72M的,F072是48M的。后面我发现是我这行代码进行了异或和取余。然后我之后对这行代码进行测试,
当我将他改成outbuff=intbuff^key[j]; 的时候,执行这行代码大概也就几百个NS;
当改成 j=i%lenkey; //outbuff=intbuff^key[j]; 执行这行代码大概也几百个NS;
但是只要即进行了异或,又进行取余的时候,那么执行这行代码就要11us,后面没办法,只能将这个函数改成
- void En_Dis_Code(uint8_t *intbuff,uint8_t len,uint8_t *key,uint8_t lenkey,uint8_t *outbuff)
- {
- uint8_t i,j=0;
- for(i=0;i<len;i++)
- {
- outbuff[i]=intbuff[i]^key[j];
- j++;
- if(j==lenkey)j=0;
- }
- }
复制代码 即使芯片差一点,也不会这么夸张吧 欢迎大家一起讨论讨论 |
|