朱杰
隨著網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)安全問題層出不窮。網(wǎng)絡(luò)攻擊、信息泄露等問題嚴(yán)重困擾著人們,網(wǎng)絡(luò)安全是一個(gè)非常大的課題,包括的范圍也非常廣,本文只從數(shù)據(jù)傳輸加密的角度對部分算法、傳輸協(xié)議和身份認(rèn)證等方面進(jìn)行描述,提出了一種較為安全的加密傳輸方法,并提供了部分源程序供參考。
1.引言
網(wǎng)絡(luò)的誕生和發(fā)展,極大地方便了我們的溝通和交流,人們的生產(chǎn)、生活日漸依賴網(wǎng)絡(luò)。自從網(wǎng)絡(luò)誕生起,網(wǎng)絡(luò)安全問題就一直如影隨形,濫用網(wǎng)絡(luò)技術(shù)缺陷和漏洞的網(wǎng)絡(luò)攻擊和入侵,更讓人們防不勝防。病毒、木馬、黑客成為人人皆知的名詞,由此產(chǎn)生了非常多的網(wǎng)絡(luò)安全技術(shù)和防護(hù)產(chǎn)品,如:防火墻、防病毒網(wǎng)關(guān)、入侵防御、漏洞掃描、日志分析等。要加強(qiáng)網(wǎng)絡(luò)安全還需要對網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行加密,對于網(wǎng)絡(luò)數(shù)據(jù)加密也有非常多的加密算法,如DES,3DES,RC2,RC4,IDEA,RSA,DSA,AES,BLOWFISH,MD5,PKCS等。
2.數(shù)據(jù)傳輸
建立網(wǎng)絡(luò)連接并傳送數(shù)據(jù)或文件必須通過網(wǎng)絡(luò)傳輸協(xié)議,它是計(jì)算機(jī)通信或網(wǎng)絡(luò)設(shè)備的共同語言,如TCP/IP,NetBEUI,DHCP,F(xiàn)TP等。瀏覽器是多數(shù)用戶訪問網(wǎng)絡(luò)資源最常用技術(shù),使用瀏覽器進(jìn)行網(wǎng)絡(luò)連接和數(shù)據(jù)傳輸是建立在TCP/IP通信協(xié)議之上的HTTP(Hyper Text Transfer Protocol)協(xié)議,它是一個(gè)無狀態(tài)協(xié)議。它的請求方法有GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,CONNECT。
3.身份認(rèn)證
從網(wǎng)絡(luò)上獲取需要的信息,提供這些信息資源的是一個(gè)個(gè)的站點(diǎn),通過互聯(lián)網(wǎng)把這些站點(diǎn)相互連接起來。通過超鏈接可以從一個(gè)網(wǎng)頁訪問到另外一個(gè)網(wǎng)頁,從一個(gè)站點(diǎn)連接到另外一個(gè)站點(diǎn),所有的這一切組成一個(gè)龐大的網(wǎng),這就是Web。
4.安全加密實(shí)現(xiàn)
從服務(wù)器端產(chǎn)生4段隨機(jī)字符串,其中2段長度不小于255,另2段長度不小于50,4段字符串按照長短各一個(gè)配成兩對,把兩對字符串傳遞到驗(yàn)證頁面,同時(shí)傳遞到客戶端,在客戶端(js)利用長度短的字符串為變量,把用戶名及密碼進(jìn)行加密保存到長的字符串中,利用post把加密的包含用戶名及密碼的2段長字符串上傳驗(yàn)證,服務(wù)器端收到這兩段字符串后,利用原有的2組字符串進(jìn)行解密,并把加密出的用戶名及密碼在服務(wù)器端進(jìn)行二次加密,與從數(shù)據(jù)庫中提取的用戶名及密碼進(jìn)行比對,如果符合要求則通過身份驗(yàn)證,否則判定為非法用戶。
4.1加密變量的獲取
String s1=””, s2=””, s3=””, s4=””; //添加4個(gè)字符串變量用來存放產(chǎn)生的隨機(jī)變量char numb []={’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’, ’Z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,‘z’,’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’}; //設(shè)定隨機(jī)變量中的字符int i0=(int)( Math.random()*58);//產(chǎn)生0-57的隨機(jī)整數(shù),根據(jù)前面設(shè)定的字符數(shù),我們前面設(shè)定了
58個(gè)int i12=0, i34=0;//設(shè)定4個(gè)隨機(jī)數(shù)的長度i12=(int)(Math.random()*10)+40;
for ( i=0,i {s1= s1+numb[i0]; i0=(int)( Math.random()*58); } i0=(int)( Math.random()*58); i12=(int)( Math.random()*10)+40; for ( i=0,i {s2= s2+numb[i0]; i0=(int)( Math.random()*58); } i0=(int)( Math.random()*58); i34=(int)( Math.random()*10)+245; for ( i=0,i {s3= s3+numb[i0]; i0=(int)( Math.random()*58); } i34=(int)( Math.random()*10)+245; for ( i=0,i {s4= s4+numb[i0]; i0=(int)( Math.random()*58); } 然后把獲取的4個(gè)隨機(jī)數(shù)按照一、三一組,二、四一組,做一個(gè)md5加密并同時(shí)傳到用戶身份認(rèn)證頁和客戶端用戶名及密碼上傳頁面。 4.2用戶端加密 用戶端錄入用戶名及密碼通過post上傳時(shí),先經(jīng)過js把服務(wù)器傳到的隨機(jī)數(shù)md5解密,然后把取出的四段隨機(jī)數(shù)用于用戶名及密碼的加密: var usr_len=user.length;//獲取用戶名長度 var user_sub=””,pwd_sub=””; var asc2=0; var pwd_len=passwd.length;//獲取密碼長度 for (var i=0; i< usr_len; i++) { user_sub =s1.substring (i,i+1);// s1是來自服務(wù)器的s1 asc2= user_sub.charCodeAt(); if (asc2%2==0) { asc2=asc2*2; } s3=s3.substring(0,asc2)+ user_sub + s3.substring(asc2); } for (var i=0; i< pwd_len; i++) { pwd_sub =s2.substring (i,i+1);// s2是來自服務(wù)器的s2 asc2= pwd_sub.charCodeAt(); if (asc2%2==0) { asc2=asc2*2; } s4=s4.substring(0,asc2)+ user_sub + s4.substring(asc2); } 然后把s3和s4進(jìn)行md5加密,并傳到服務(wù)器。 4.3服務(wù)器端解密驗(yàn)證 int i_ur=cs3.length()-s3.length();//cs3是從客戶端傳到的s3 int i_pw=cs4.length ()-s4.length ();//cs4是從客戶端傳到的s4 String cusr=””,cpwd=””; String user_sub=””, pwd_sub=””; for (int i= i_ur-1; i< 0; i--) {user_sub =s1.substring (i,i+1);// s1是來自服務(wù)器的s1 asc2= user _sub.charCodeAt(); if (asc2%2==0) { asc2=asc2*2; } cusr= cs3.substring(asc2, asc2+1)+ cusr; } for (int i= i_pw-1; i< 0; i--) {pwd_sub =s2.substring (i,i+1);// s2是來自服務(wù)器的s2 asc2= pwd _sub.charCodeAt(); if (asc2%2==0) { asc2=asc2*2; } cpwd = cs4.substring(asc2, asc2+1)+ cpwd; } 5.結(jié)束語 最后把從客戶端傳到的用戶名和密碼進(jìn)行md5加密,按照這2個(gè)參數(shù)從數(shù)據(jù)庫調(diào)取用戶的序列號(上一次退出系統(tǒng)時(shí)添加到數(shù)據(jù)庫中與用戶對應(yīng)的隨機(jī)編號)及權(quán)限,如果取到,則按照取到的權(quán)限及序列號打開相應(yīng)的頁面。 基金項(xiàng)目:山東省重大科技創(chuàng)新工程項(xiàng)目(2018CXGC1501)