DES加密算法如何實(shí)現(xiàn)軟件加密
計(jì)算機(jī)軟件是一種特殊的商品,極易復(fù)制和盜版,加密就成為了保護(hù)軟件的一種必要手段。其實(shí),用DES加密算法也可以實(shí)現(xiàn)軟件加密,那么,我今天就給大家講一下用DES加密算法是如何實(shí)現(xiàn)軟件加密的。
一、DES算法如何實(shí)現(xiàn)軟件加密
無論是軟加密還是硬加密都需要選擇一個(gè)成熟而且高效的加密算法,目前,可供選擇的加密算法有很多,如MD2、MD5、DES等。DES加密算法是最典型的并且也是應(yīng)用最廣的算法之一,它被應(yīng)用于許多需要安全加密的場合。
DES加密算法把64位的明文文件進(jìn)行16輪編碼變換為64位的密文輸出塊,它使用64位的密鑰(實(shí)際為56位,8位是奇偶校驗(yàn)位),整個(gè)加密算法的流程如下:

(1)輸入64個(gè)二進(jìn)制位明碼文數(shù)據(jù)區(qū)組T=t1t2…t64,按DES初始換位表IP進(jìn)行換位,得到區(qū)組:B(0)=b1(0)b2(0)…b64(0)=t58t50…t7;
(2)將B(i)分為左右兩個(gè)大小相等的部分,每部分為一個(gè)32位二進(jìn)制的數(shù)據(jù)塊:
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,擴(kuò)充為8個(gè)6位二進(jìn)制的塊;
(3)用變換后的48位二進(jìn)制的密鑰K(i+1)=k1(i+1)k2(i+1)…k48(i+1)與E(R(i))按位相加(邏輯異或);
(4)將以上第j個(gè)二進(jìn)制的塊(記為Z=Zj1Zj2Zj3Zj4Zj5Zj6)中的Zj1Zj6作為行號,Zj2Zj3Zj4Zj5為列號,查找替代函數(shù)Sj,變換成4位數(shù);
(5)八個(gè)替代函數(shù)Sj(1!j!8)的輸出拼接為32位二進(jìn)制數(shù)據(jù)區(qū)組yl(i)y2(i)…y32(i),并按換位函數(shù)P進(jìn)行換位: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),即得到經(jīng)第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))函數(shù)代表步驟(2)~(5)(7)
經(jīng)過l6次迭代運(yùn)算后,對R(l6)L(l6)作逆初始換位IP-l,得到密碼文。另外,每次迭代中要用到48位的密鑰K(i)=kl(i)k2(i)…k48(i)是根據(jù)64位原始密鑰計(jì)算出來的,方法如下圖。

加密算法中用到的初始換位表IP、放大換位表E、替代函數(shù)表S、換位函數(shù)P、逆初始換位IP-l、選擇換位PC-l、移位換位PC-2以及循環(huán)移位次數(shù)表可以查得。
DES解密算法與加密算法相同,僅密鑰的使用順序相反。
二、加密明碼的選擇
要實(shí)現(xiàn)軟件保護(hù),還必須選擇一個(gè)計(jì)算機(jī)“指紋”,也就是明碼。對于某個(gè)加密軟件而言,明碼必須是唯一的,至少也應(yīng)保證在小范圍內(nèi)不會重復(fù),且難以更改。明碼的選擇有很多種,我們應(yīng)該根據(jù)具體情況來確定,假如你的軟件是通過刻錄在光盤上出售,你可以在光盤上的某個(gè)特定位置存放一個(gè)特殊數(shù)據(jù),對這個(gè)數(shù)據(jù)文件加密后,可以保證只有使用正版光盤才可以安裝軟件,防止了軟件的隨意復(fù)制。有些情況下,由于軟件使用批量小,你要保證一個(gè)軟件只能安裝在一臺主機(jī)上,那么你就必須取得該臺主機(jī)的特征數(shù)據(jù)并對其進(jìn)行加密,計(jì)算出軟件使用“注冊碼”。目前常用的是計(jì)算機(jī)的硬盤序列號、網(wǎng)卡的MAC地址、CPU序列號等,這些方法特別適合在Internet上發(fā)售的軟件加密,用戶可以通過Internet很方便地申請和取得注冊碼。如果要進(jìn)一步保證加密的可靠性,可以使用加密狗等專門的硬件來提供明碼,在這種情況下,明碼與密文可以同時(shí)放置在硬件中,軟件通過驗(yàn)證密文的正確性決定是否繼續(xù)執(zhí)行。這樣,軟、硬件的結(jié)合更好地實(shí)現(xiàn)了對軟件的保護(hù)。
三、軟件加密設(shè)計(jì)
我們利用硬盤磁盤序列號及DES加密算法實(shí)現(xiàn)了對軟件的加密,加密中用到的代碼如下:
zhuce=Faise
hdsn=DriveSeria
(Left(App.Path,l))
’利用API函數(shù)取得硬盤序列號hdsnh=heX
(hdsn)’變?yōu)閘6進(jìn)制碼
pw_="l2345678"’選擇一個(gè)密鑰
aaa_=encrypt(hdsnh,pw_)
’調(diào)DES加密函數(shù)取得密文ret=GetKeyHKEYLOCALMACHINE,"Software\hydk",hKeymiwen
Ifret=0Then’
取得Windows注冊表中相應(yīng)密文即注冊碼
Ifmiwen=aaathen’
判斷注冊碼是否等于加密密文Zhuce=true
endif
endIf
ifnotzhucethen
zhucema=InputBox
("軟件還未注冊或注冊錯(cuò)誤!??!"&Chr(13)&"請您根據(jù)數(shù)值:"&hdsn&"向軟件供應(yīng)者索取注冊碼并輸入下面的文本框中","軟件注冊")Ifzhucema<>""then
bbb_=encrypt
(zhucema,pw_)’計(jì)算注冊碼加密密文
ifaaa_=bbb_then’
與正式密文是否相等?WriteRegKeyHKEYLOCALMACHINE,"Soft-ware\hydk",hKey,
bbb_Zhuce=true’密文寫入注冊表MsgBox"注冊成功?。。?
EIseMsgbox"注冊錯(cuò)誤?。?!"
endif
EndIf
Endif
Ifzhucethen
’此處調(diào)用程序入口過程
eIse
’程序退出
endif
以上代碼放置在正式程序代碼前,它首先根據(jù)硬盤序列號計(jì)算出密文aaa,再與從計(jì)算機(jī)注冊表中查得的注冊碼bbb比較,如一致表示軟件合法,否則要求用戶輸入向軟件供應(yīng)商申請到的注冊碼,再與aaa比較,如一致就把密文寫入到注冊表中,否則停止軟件執(zhí)行。
以上軟件保護(hù)方法的安全性能由DES加密算法和明碼決定。DES加密算法的安全主要決定于對密鑰保護(hù),因?yàn)榧偃缫獙ES進(jìn)行窮舉攻擊,必須執(zhí)行256≈7*1016次加密運(yùn)算,這基本上是不可能的。由于密鑰存在于程序的二進(jìn)制代碼中,其保密性是可以保證的。因此,明碼的選擇成為軟件加密的關(guān)鍵,我們應(yīng)該選擇有效的加密對象來加密軟件。
小知識之DES加密算法
DES加密算法為密碼體制中的對稱密碼體制,又被成為美國數(shù)據(jù)加密標(biāo)準(zhǔn),是1972年美國IBM公司研制的對稱密碼體制加密算法。其密匙長度為56位,明文按64位進(jìn)行分組,將分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。










