最近網上出現了一個短暫的關于javascript解密des算法的熱潮,許多人被這種看似神秘卻實質簡單的算法所吸引。那么,什么是des算法呢?
DES(Data Encryption Standard)算法是對針對數據進行加密的一種算法,1972年美國IBM公司研究出來,1977年公布為美國聯邦資料處理標準(FIPS),并授權在非美國政府機構內使用,隨著計算機的迅速發展,DES算法已經不太適用于對數據的加密,而且它的密鑰長度很短,安全性不足以抵御現代計算技術的攻擊,但它的結構和方法在當今廣泛使用的AES和其他加密算法中發揮了重要作用。
DES算法采用的是對稱加密方式,其密鑰長度補位為64位,數據的加密和解密過程均使用相同的密鑰,這一點和AES算法有所不同。現在我們用javascript來模擬一下數據的加密和解密過程:
function encryptByDES (message, key) { var keyHex = CryptoJS.enc.Utf8.parse(key); var encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } function decryptByDES (ciphertext, key) { var keyHex = CryptoJS.enc.Utf8.parse(key); var decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Base64.parse(ciphertext) }, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); } var message = "Hello World!"; var key = "12345678"; console.log("加密前: " + message); var ciphertext = encryptByDES(message, key); console.log("加密后: " + ciphertext); var plaintext = decryptByDES(ciphertext, key); console.log("解密后: " + plaintext);
這里我們使用了CryptoJS來實現DES加密和解密,它是一個純javascript實現的加密算法庫,很方便和安全。我們定義了兩個函數,分別是encryptByDES和decryptByDES,前者用于對message進行加密(也即加密明文),后者用于對密文ciphertext進行解密(也即還原明文)。注意,在實現的時候,需要指定對稱加密模式(ECB)和明文長度填充方式(PKCS7)。使用還很簡單,調用這兩個函數即可,可以自動分別進行加密和解密,得到目標結果。
到這里,我們已經可以說是相對全面地介紹了DES算法和其javascript的實現方法,雖然這只是一個demo,但相信可以作為廣大程序員們入門的一條路線吧。如果要深入研究的話,請大神路過指點一二吧,哈哈!