单片机加密初级

来源:互联网 发布:java md5工具类运用 编辑:程序博客网 时间:2024/06/05 19:56


第一环:

ID-->F1(ID) -----》IDX,

将ID通过自定义的一个算法F1,转换为一个整数IDX , F1为不可逆运算,也不能被轻易分析,这个实际上是容易实现的。

然后,将IDX保存到EEPROM或FLASH的任何地方,我们通过编一个函数 GET_IDX()能够读出这个数即可。


第二环:

再编一个函数:

int getmy_1(){
   return F1(ID)-GET_IDX()+1;
}

int getmy_0(){
   return F1(ID)-GET_IDX();
}


还有一些其他自定义的函数内:都可以直接使用(F1(ID)-GET_IDX()) 来替代0; 直接用(F1(ID)-GET_IDX()+1)来替代1;


第三环:

在程序中对效率不太高的情况下需要使用到1的地方,都可以考虑使用getmy_1()代替。

或即使本不使用1,也可以来用上一下:

如: x=(x+1-getmy_1())*getmy_1();  


或把 for(i=0;i<=count-1;i++) 
改为: for(i=getmy_0();i<=count-getmy_1();i++)

抑或是:

指针 p++;可以改为: p=p+getmy_1();


或者:给函数传递变量时,传递方在 变量上+F1(ID), 被调用的函数在  变量上--GET_IDX():

比如本来是 
           void f1(){
                    int i,j;
                    ....
                    j=f2(i);
                }

              int f2(i){
                     return i*2;
              }
修改为:
           void f1(){
                    int i;
                    ....
                    j=f2(i+F1(ID));
                }

              int f2(i){
                     return (i-GET_IDX())*2;
              }


如程序被非法复制:从ID无法得到IDX,那么IDX和F1(ID)不相等,

那么getmy_0不再是0,getmy_1不再是1,


程序将出现什么结果,谁都无法预料了。

---------------------------------------------------------
特点: 由于整个程序的加密,采用了“运算加密”的思路, 而非判断加密, 又没有用到任何一行 if判断,让解密者去想破脑袋吧。

看了这篇文章,我也对加密有了形式上的了解,让没有一点思路的人有点思路,菜鸟片,大神可以提供更多的方案供大家交流学习。
0 0
原创粉丝点击