解密:查表得到顺序为解密的值.
解密 再逆序
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];
}
}
}