使用java實現真實資料DES加密(java原始碼)

來源:互聯網
上載者:User

在前面那篇文章《使用DES實現真實資料加密的前奏(分析)》分析的基礎上,用java實現了可以對字串進行加密,不過遺留的問題是不能對字串進行解密,因為在把加密後的位元組型數組轉為字串之後再轉回來就和原先的位元組型數組不一樣了,會少許多位,不知道這是為什麼。莫非位元組型數組和字串不是一對一轉換的嗎?很迷惑

具體實現大家可以先看這個圖,這裡面主要添加了兩個類,DESPre和DESControl。DESPre主要是實現了前一篇文章中說到的基本操作,比如byte數組轉成位元組,等。DESControl主要是用來操作DES類(核心演算法類)和DESPre(預先處理類),可以算得上是一個流程式控制制類吧。

下面給出DESControl類的代碼,其他代碼我最後給出連結。

package mydes;</p><p>/**<br /> * DES控制類,主要是封裝DES核心和DES與處理類,留給前台良好借口<br /> * @author 胡陽<br /> * blog:http://www.the5fire.net<br /> * 著作權聲明:轉載請保留源碼完整資訊<br /> */<br />public class DESControl {</p><p> /**<br /> * 預先處理操作類<br /> */<br /> private DESPre desPre = new DESPre();</p><p> /**<br /> * DES核心演算法類<br /> */<br /> private DES des = new DES();</p><p> private int[] K = null;</p><p> public DESControl() {</p><p> }</p><p> /**<br /> * 傳入密鑰<br /> * @param keyText<br /> */<br /> public DESControl(String keyText) {<br /> byte[] key = desPre.dataformat(keyText.getBytes());<br /> K = desPre.convertBinary(key);<br /> }</p><p> /**<br /> * 加密:傳入明文進行加密得到結果以位元組型數組形式返回<br /> * @param plainText<br /> * @return<br /> */<br /> public byte[] DesEntrypt(String plainText) {<br /> byte[] mText = null;<br /> int[] M = null;<br /> byte[] result = null;//用來儲存加密後的結果</p><p> //1.首先對其預先處理<br /> //轉換成byte數組<br /> mText = desPre.dataformat(plainText.getBytes());</p><p> int datalen = mText.length;<br /> int unitcount = datalen / 8;</p><p> //將byte轉換為二進位<br /> M = desPre.convertBinary(mText);</p><p> //根據轉換好的明文,執行個體化result<br /> result = new byte[M.length / 8];</p><p> //2.分組進行加密<br /> for (int i = 0; i < unitcount; i++) {<br /> int[] tmpkey = new int[64];<br /> int[] tmpdata = new int[64];</p><p> System.arraycopy(K, 0, tmpkey, 0, 64);<br /> System.arraycopy(M, i * 64, tmpdata, 0, 64);</p><p> int[] tmpC = des.encrypt(tmpdata, tmpkey);<br /> byte[] tmpResult = desPre.convertBytes(tmpC);<br /> System.arraycopy(tmpResult, 0, result, i * 8, 8);<br /> }</p><p> return result;<br /> }</p><p> /**<br /> * 解密:傳入加密後的位元組數組,解密後以位元組數組的形式返回<br /> * @param cText<br /> * @return<br /> */<br /> public byte[] DesDecryption(byte[] cText) {</p><p> int[] C = desPre.convertBinary(cText);</p><p> int datalen = cText.length;<br /> int unitcount = datalen / 8;</p><p> //根據轉換好的明文,執行個體化result<br /> byte[] result = new byte[C.length / 8];</p><p> for (int i = 0; i < unitcount; i++) {<br /> int[] tmpkey = new int[64];<br /> int[] tmpdata = new int[64];</p><p> System.arraycopy(K, 0, tmpkey, 0, 64);<br /> System.arraycopy(C, i * 64, tmpdata, 0, 64);</p><p> int[] tmpC = des.decryption(tmpdata, tmpkey);<br /> byte[] tmpResult = desPre.convertBytes(tmpC);<br /> System.arraycopy(tmpResult, 0, result, i * 8, 8);<br /> }<br /> byte[] tmpR = desPre.removeExpand(result);//消除擴充位</p><p> return tmpR;<br /> }<br />}

實現過程中參照了幾個網上的原始碼,很感謝那些樂於分享的人。

原始碼地址:http://u.115.com/file/f49b8fc342(30天有效,如果到期了或者不能下載了請留言告訴我)

整個代碼編寫還是在eclipse中進行的,打包的也是一個eclipse工程。

如果這裡看不明白記得先去看前面的基礎文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.