//常數
#定義C1 52845
#定義C2 22719
cs string encrypt(cs string,word key)//加密函數
{
CString結果,str
int i,j;
結果= S;//初始化結果字符串
for(I = 0;我& lts . GetLength();I++) //依次對字符串中的每個字符進行操作。
{
結果。SetAt(我,s.getat(i)^(key>;& gt8));//將密鑰移位,並與字符進行異或運算。
Key =((字節)結果。GetAt(I)+Key)* c 1+C2;//生成下壹個密鑰
}
s =結果;//保存結果
結果。empty();//清除結果
for(I = 0;我& lts . GetLength();I++) //轉換加密結果。
{
j=(字節)S . GetAt(I);//提取字符
//將字符轉換成兩個字母保存。
str = " 12 ";//將str長度設置為2
海峽。SetAt(0,65+j/26);//如果把65換成更大的數,比如256,密文會變成亂碼,效果會更好。相應的,解密位也要改成同壹個數。
海峽。SetAt(1,65+j % 26);
result+= str;
}
返回結果;
}
cstring decrypt(cstring,word key)//解密函數
{
CString結果,str
int i,j;
結果。empty();//清除結果
for(I = 0;我& lts . GetLength()/2;I++) //以兩個字母為壹組處理字符串。
{
j =((BYTE)S . GetAt(2 * I)-65)* 26;);//相應的,解密位也要改成同壹個數。
j+=(BYTE)S . GetAt(2 * I+1)-65;
str = " 1 ";//將str長度設置為1。
海峽。SetAt(0,j);
result+= str;//追加字符以恢復字符串
}
s =結果;//保存中間結果
for(I = 0;我& lts . GetLength();I++) //依次對字符串中的每個字符進行操作。
{
結果。SetAt(我,(byte)s.getat(i)^(key>;& gt8));//將密鑰移位,並與字符進行異或運算。
Key =((BYTE)S . GetAt(I)+Key)* c 1+C2;//生成下壹個密鑰
}
返回結果;
}
使用
CString text = _ T(" 192.168.18.14 ");//要加密的字符串
WORD key = 1314;//鍵
CString jiami=Encrypt(文本,密鑰);//加密
AfxMessageBox(_T("密文:")+jiami);
CString解蜜=Decrypt(jiami,key);//解密
AfxMessageBox(_ T(" original:")+解蜜);