摘要:提出了加密數據的通信過程,并分析了兩個加密算法,同時給出了算法的代碼。
關鍵詞:密碼學 解密 加密 加密算法
中圖分類號:TP309.7 文獻標識碼:B 文章編號:1002-2422(2008)01-0049-02
1 加密數據的通信過程
通過一個例子來說明:如果A向B發送一份重要數據p,而T卻想中途截獲該數據,并且有可能發送假數據。為了保證數據的安全,A必須對數據進行加密,將加密后的密文發送給B。該過程如圖1所示:
說明:(1)e=Ek(p)為加密過程,k為密鑰,c為加密后的密文;(2)p=Dk(c)為解密過程;(3)加密與解密過程可表述為Dk(Ek(p))=p。
密鑰k是進行數據加密的關鍵部分,是經過A,B雙方共同約定的,不能外泄。這樣即使T掌握了加密算法和解密算法,也不能得到真正的數據p,從而達到數據保密目的。
保密系統應當滿足下述要求:

(1)系統即使達不到理論上不可突破的程度,也應當是破解起來有相當大難度的:
(2)系統的保密性不應依賴于對加密體制或算法的保密,而是依賴于密鑰;
(3)加密算法和解密算法適用于所有密鑰空間中的元素,更換密鑰不影響加密強度;
(4)系統便于實現和方便使用。
2 加密算法分析
2.1矩陣旋轉
矩陣旋轉的原理是設置一個8x8的矩陣,根據所給密碼的情況旋轉不同的圈數,這有四種情況。主要思想是重新排列數據,排列的順序由密碼來決定。程序流程及說明;
(1)要求用戶選擇被加密文件和輸出文件,并讀入用戶輸入的密碼;
(2)讀入被加密文件的數據至緩沖區;
(3)對密碼單個字符除4取余,得到旋轉90度的次數;
(4)根據余數進行順時針旋轉,并寫入到輸出文件中;
(5)對于不足8x8字節部分用密碼中第一個字符對其進行異或;
(6)緩沖區中某個字符位置(x,y)確定方法為xx8+y,其中x,y∈{0,1,…7}。
下面是加密部分的完整代碼:
void Cmy101 DIg::OnButton2()
{
riffle Fi,Fo;
CHAR*lpBuf1,*lpBuf2;
lpBuff=new CHAr[64];
lpBur2=new CHAP,[64];
int i=0,Size;
if(m_Input==_T(“”)llm_Output==_T(“”)llm_Pwd==_T(“”)){
AfxMessageBox(_T(“請檢查文件名或密碼是否為空!”));
Return;}
Fi.Open(m_Input,Cfile::modeRead);
Fo.Open(m_Output,Cfile::modeCreatelCfile::modeWrite);
For(DWORD t=0;t if((Size=Fi.Read(lpBuf1,sizeof(CHAR)*64))==64) for(int j=0;j<=(m_Pwd.Cet,GetAt(i)%4);j++){ for(int k=0;k<8;k++) for(int z=0;z<8;z++) lpBuf2[z*8+k]=lpBuf1[k*8+z]; for(k=0;k<64;k++) lpBuf1[k]=lpBuf2[k]; } else for(int j=0.J { lpBuf2[j]=(IpBuff[j])^(m_Pwd.GetAt(0)); } Fo.Write(IpBuf2,Size); i++; if(i==m_Pwd.GetLength())i=0: } } 解密部分代碼和加密相似,只是逆時針旋轉回原來的位置就可以了,把lpBuf2[z*8+k]=lpBuf1[k*8+z]換成lpBuf2[k*8+z]=lpBun[z*8+k]即可,一定要保證密碼正確,否則會造成錯誤的結果. 2.2愷撒密碼 加密方法是把a換成D,b換成E,c換成F,……,z換成C。這樣,明文和密文的字母就建立了一一對應的等價關系。愷撒密碼其實是對明文加上了一個偏移值29,即“a”對應的ASCII碼為97,“D”對應的ASCII碼為68,相減可得。Heavyd就可以變換為KHDYBG。由此可以對其進行擴展,增強其保密性。 下面是對愷撒密碼的自行擴展,對明文進行異或運算,并加上一個偏移值: (1)加密過程 c=(p XOR k)+k,當所得c的值大于255時, c=(p XOR k)+k-256,c為密文,p為明文,k為密鑰(密碼)。c,p,k∈{0,1,…,255} (2)解密過程 P=(c-k)XOR k,當(c-k)小于零時, p=(c-k+256)XOR k,c為密文,p為明文,k為密鑰(密碼)。 下面是加密部分的C代碼描述: void main() {while(buff=NULL) { *bur=(*buf)^k ; if(*bur>255)*bur-=256; buf++; } } buf為存儲明文的緩沖區,對其進行變換后bur變為存儲密文的緩沖區。k為加密的密鑰。 下面是解密部分的C代碼描述: void main(){ while(buf!=NULL){ if((*buf-k)<0) *bur+=256; *buf=(*buf-k)^k; buf++;}} bur為存儲密文的緩沖區,對其進行變換后成為存儲明文的緩沖區。k為解密的密鑰。 3 結束語 密碼學是計算機安全領域的重要內容,而加密和解密又是密碼學最重要的概念。數據加密算法是先進加密技術的基礎和核心,只有在牢固掌握基本加密算法的基礎上,才能更徹底的研究密碼學的相關技術。