自定义的一些加密条件,可叠加形成加解密方案

  A:加密:以值为顺序查询固定的码表

     解密:查表得到顺序为解密的值.


 B:加密:以字串逆序 
    解密      再逆序
 C:加密:以字串每char为一个值分解为两个数的和,每个数独立做一个CHAR
 分解方式多变 例:int ci_1 = ci /3
   int ci_2 = ci - ci_1;

   解密:以加密的字串每2个相加合并成一个做一个CHAR 

D 加密   异或 一个常数

   解密   再次异或那上常数

e.

const uint8_t D_ARRY[]={0,1,2,3,4,5,6,7};

const size_t D_ARRY_LEN=sizeof(D_ARRY);


void encryption_D(char * str,unsignedchar *encrypstr)

{

    for (int i=0; i<strlen(str); i++)

    {

        encrypstr[i]=((unsignedchar)str[i]<< D_ARRY[i%D_ARRY_LEN] ) | ((unsignedchar)str[i]>>(D_ARRY_LEN-D_ARRY[i%D_ARRY_LEN]));

    }

}

void decryption_D(constchar * encrystr,char* decrystr)

{

    for (int i=0; i<strlen(encrystr); i++)

    {

        decrystr[i]=((unsignedchar)encrystr[i]>>D_ARRY[i%D_ARRY_LEN] ) | ((unsignedchar)encrystr[i]<<(D_ARRY_LEN-D_ARRY[i%D_ARRY_LEN]));

    }

    

}



f:

const uint8_t E_keyarry[]={4,2,1,3,6,5};//定义常量key替换顺序

const size_t E_keyarrylength=sizeof(E_keyarry);

void encryptione_E(char * str,char *outenstr)

{

    

    char  newstr[1024]={0};

    strcpy(newstr, str);

    size_t strmod=strlen(str)%E_keyarrylength;

    if (strmod!=0)

    {

        for (int i=0; i<E_keyarrylength-strmod; i++)

        {

            char buf[]={46,00};

            strcat(newstr, buf);

        }

    }

    for (size_t i=0; i<=strlen(newstr); i=i+E_keyarrylength)

    {

        for (int j=0; j<E_keyarrylength; j++)

        {

            outenstr[i+j]=newstr[i+E_keyarry[j]-1];

        }

    }

    

}


void decryptione_E(char * enstr,char *outdestr)

{

    for (int i=0; i<=strlen(enstr); i+=E_keyarrylength)

    {

        for (int j=0; j<E_keyarrylength; j++)

        {

            outdestr[i+E_keyarry[j]-1]=enstr[i+j];

        }

    }

    

    for (size_t i=strlen(outdestr)-1; i>strlen(outdestr)-E_keyarrylength; i--)

    {

        if (outdestr[i]==46)

        {

            outdestr[i]=0;

        }

        else

        {

            break;

        }

    }

}




g:


const Byte F_BYTE=9;//二进制00001001

void encryption_F(char* str,char *outenstr)

{

    for (int i=0; i<strlen(str); i++)

    {

        if (0== (1 &F_BYTE>>(i%8)))

        {

            outenstr[i]=~str[i];

        }

        elseif (1==(1 &F_BYTE>>(i%8)))

        {

            outenstr[i]=str[i];

        }

    }

    

}

void decryption_F(char*enstr,char* outdestr )

{

    for (int i=0; i<strlen(enstr); i++)

    {

        if (0==(1 &F_BYTE>>(i%8)))

        {

            outdestr[i]=~enstr[i];

        }

        elseif (1==(1 &F_BYTE>>(i%8)))

        {

            outdestr[i]=enstr[i];

            

        }

        

        

    }

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值