编程演示加密解密算法的实现
文/图 暗夜舞者
===================================
目前各大公司开发的软件都有自己的加密算法用来保护版权,用户想要使用软件的全部功能就要付费,而算法的优劣性直接决定了实现方法的困难度。
下面我将演示一个加密解密算法的实现,为单个数据的加密解密,密钥自己确定,界面如图1所示。这3个编辑框连接3个控件变量,分别是CString m_jiami、CString m_jiemi和WORD m_miyao,其中WORD类型就是unsinged short类型。加密函数的代码如下所示。
图1
CString str,str1,r;
int i,j;
str=s;
for(i=0;i<s.GetLength();i++)
{
str.SetAt(i,s.GetAt(i)+k);
//依次提取原数据的每一个字符,加密钥后写入新的字符串
}
s=str; //更新原字符串
for(i=0;i<s.GetLength();i++)
{
j=(BYTE)s.GetAt(i);
str1="01";
str1.SetAt(0,65+j/26);
str1.SetAt(1,65+j%26); //依次提取更新后的字符串中的每一个字符,用一种算法将一个字符分解成两个字符
r+=str1; //合成最终字符串
}
return r; //返回这个字符串
上面代码的算法很明显,就是将原字符加密钥后分解成2部分,分别是“65+j/26”和“65+j%26”。这个算法不是一成不变的,大家可以根据需要写出自己的算法。下面我再给出解密函数,其代码如下所示。
CString r,str;
int i,j;
for(i=0;i<s.GetLength()/2;i++)
{
j=((BYTE)s.GetAt(2*i)-65)*26;
j+=(BYTE)s.GetAt(2*i+1)-65;
str="0";
str.SetAt(0,j);
r+=str;
}
s=r;
for(i=0;i<s.GetLength();i++)
{
r.SetAt(i,(BYTE)s.GetAt(i)-k);
}
return r;
这个函数是加密函数的逆运算,不难理解,不过要注意类型的变换。在字符串的操作中,尤其是在这样的加密解密算法的开发中,有两个函数是非常有用的,就是GetAt()和SetAt(),它们是CString的函数,原型分别是“TCHAR GetAt(int nIndex)const”和“void SetAt(int nIndex,TCHAR ch)”,其中的nIndex是字符的位置,ch表示字符。GetAt是读取位置为nIndex的字符,SetAt是设置位置为nIndex的字符为ch。下面我们测试一下编写好的程序,如图2所示。
图2
本文只是抛砖引玉,向大家介绍一下加密解密算法的实现方法,其实有很多高深的算法不是这样简单就能实现的,只是本人水平有限,没有掌握,还望各位高手不吝赐教,如果大家有什么更好的实现方法,欢迎交流讨论