计算机软件是一种特殊的商品,极易复制和盗版,加密就成为了保护软件的一种必要手段。其实,用DES加密算法也可以实现软件加密,那么,我今天就给大家讲一下用DES加密算法是如何实现软件加密的。

一、DES算法如何实现软件加密

无论是软加密还是硬加密都需要选择一个成熟而且高效的加密算法,目前,可供选择的加密算法有很多,如MD2、MD5、DES等。DES加密算法是最典型的并且也是应用最广的算法之一,它被应用于许多需要安全加密的场合。

DES加密算法把64位的明文文件进行16轮编码变换为64位的密文输出块,它使用64位的密钥(实际为56位,8位是奇偶校验位),整个加密算法的流程如下:

DES加密算法如何实现软件加密

(1)输入64个二进制位明码文数据区组T=t1t2…t64,按DES初始换位表IP进行换位,得到区组:B(0)=b1(0)b2(0)…b64(0)=t58t50…t7;

(2)将B(i)分为左右两个大小相等的部分,每部分为一个32位二进制的数据块:

L(i)=i1(i)i2(i)…i32(i)=b1(i)b2(i)…b32(i)R(i)=r1(i)r2(i)…r32(i)=b33(i)b34(i)…b64(i)把R(i)按照放大换位表E,扩充为8个6位二进制的块;

(3)用变换后的48位二进制的密钥K(i+1)=k1(i+1)k2(i+1)…k48(i+1)与E(R(i))按位相加(逻辑异或);

(4)将以上第j个二进制的块(记为Z=Zj1Zj2Zj3Zj4Zj5Zj6)中的Zj1Zj6作为行号,Zj2Zj3Zj4Zj5为列号,查找替代函数Sj,变换成4位数;

(5)八个替代函数Sj(1!j!8)的输出拼接为32位二进制数据区组yl(i)y2(i)…y32(i),并按换位函数P进行换位:X(i)=Xl(i)X2(i)…X32(i)=yl6(i)yl7(i)…y25(i)

(6)把L(i)与X(i)按位相加,形成R(i+l),且令R(i)为L(i+l),即得到经第i+l次迭代加密后的输出L(i+l)R(i+l),

即:L(i+l)=R(i)

(i+l)=L(i)+f(R(i),K(i+l))注:f(R(i),K(i+l))函数代表步骤(2)~(5)(7)

经过l6次迭代运算后,对R(l6)L(l6)作逆初始换位IP-l,得到密码文。另外,每次迭代中要用到48位的密钥K(i)=kl(i)k2(i)…k48(i)是根据64位原始密钥计算出来的,方法如下图。

DES加密算法如何实现软件加密

加密算法中用到的初始换位表IP、放大换位表E、替代函数表S、换位函数P、逆初始换位IP-l、选择换位PC-l、移位换位PC-2以及循环移位次数表可以查得。

DES解密算法与加密算法相同,仅密钥的使用顺序相反。

二、加密明码的选择

要实现软件保护,还必须选择一个计算机“指纹”,也就是明码。对于某个加密软件而言,明码必须是唯一的,至少也应保证在小范围内不会重复,且难以更改。明码的选择有很多种,我们应该根据具体情况来确定,假如你的软件是通过刻录在光盘上出售,你可以在光盘上的某个特定位置存放一个特殊数据,对这个数据文件加密后,可以保证只有使用正版光盘才可以安装软件,防止了软件的随意复制。有些情况下,由于软件使用批量小,你要保证一个软件只能安装在一台主机上,那么你就必须取得该台主机的特征数据并对其进行加密,计算出软件使用“注册码”。目前常用的是计算机的硬盘序列号、网卡的MAC地址、CPU序列号等,这些方法特别适合在Internet上发售的软件加密,用户可以通过Internet很方便地申请和取得注册码。如果要进一步保证加密的可靠性,可以使用加密狗等专门的硬件来提供明码,在这种情况下,明码与密文可以同时放置在硬件中,软件通过验证密文的正确性决定是否继续执行。这样,软、硬件的结合更好地实现了对软件的保护。

三、软件加密设计

我们利用硬盘磁盘序列号及DES加密算法实现了对软件的加密,加密中用到的代码如下:

zhuce=Faise

hdsn=DriveSeria

(Left(App.Path,l))

’利用API函数取得硬盘序列号hdsnh=heX

(hdsn)’变为l6进制码

pw_="l2345678"’选择一个密钥

aaa_=encrypt(hdsnh,pw_)

’调DES加密函数取得密文ret=GetKeyHKEYLOCALMACHINE,"Software\hydk",hKeymiwen

Ifret=0Then’

取得Windows注册表中相应密文即注册码

Ifmiwen=aaathen’

判断注册码是否等于加密密文Zhuce=true

endif

endIf

ifnotzhucethen

zhucema=InputBox

("软件还未注册或注册错误!!!"&Chr(13)&"请您根据数值:"&hdsn&"向软件供应者索取注册码并输入下面的文本框中","软件注册")Ifzhucema<>""then

bbb_=encrypt

(zhucema,pw_)’计算注册码加密密文

ifaaa_=bbb_then’

与正式密文是否相等?WriteRegKeyHKEYLOCALMACHINE,"Soft-ware\hydk",hKey,

bbb_Zhuce=true’密文写入注册表MsgBox"注册成功!!!"

EIseMsgbox"注册错误!!!"

endif

EndIf

Endif

Ifzhucethen

’此处调用程序入口过程

eIse

’程序退出

endif

以上代码放置在正式程序代码前,它首先根据硬盘序列号计算出密文aaa,再与从计算机注册表中查得的注册码bbb比较,如一致表示软件合法,否则要求用户输入向软件供应商申请到的注册码,再与aaa比较,如一致就把密文写入到注册表中,否则停止软件执行。

以上软件保护方法的安全性能由DES加密算法和明码决定。DES加密算法的安全主要决定于对密钥保护,因为假如要对DES进行穷举攻击,必须执行256≈7*1016次加密运算,这基本上是不可能的。由于密钥存在于程序的二进制代码中,其保密性是可以保证的。因此,明码的选择成为软件加密的关键,我们应该选择有效的加密对象来加密软件。

小知识之DES加密算法

DES加密算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密匙长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。