欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

编程演示加密解密算法的实现

程序员文章站 2022-05-01 18:37:55
文/图 暗夜舞者=================================== 目前各大公司开发的软件都有自己的加密算法用来保护版权,用户想要使用软件的全部功能就要付费,而算法的优劣性...

文/图 暗夜舞者
===================================
目前各大公司开发的软件都有自己的加密算法用来保护版权,用户想要使用软件的全部功能就要付费,而算法的优劣性直接决定了实现方法的困难度。
下面我将演示一个加密解密算法的实现,为单个数据的加密解密,密钥自己确定,界面如图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
本文只是抛砖引玉,向大家介绍一下加密解密算法的实现方法,其实有很多高深的算法不是这样简单就能实现的,只是本人水平有限,没有掌握,还望各位高手不吝赐教,如果大家有什么更好的实现方法,欢迎交流讨论