小弟有事先看過wiki的des及3des的說明
不過還是不太了解,
附上之前找到的文章:
http://blog.csdn.net/randyjiawenjie/article/details/6617225
這是對岸寫的,有試過,在手機上執行起來應該是對的
(因為我不知道該怎麼去試那一段密文是否符合DES的規則)
附上wiki解釋的加解密:
1.加密 : 密文 = EK3(DK2(EK1(平文)))
2.解密 : 平文 = DK1(EK2(DK3(密文)))
E=encrypt(加密) D=decrypt (解密)
個人對這段話的理解:
加密:
1.平文先加上一段key然後做加密, 得到EK1
2.EK1解密一次得到DK2 (這裡就不是很懂了,為什麼要加密再解密~這樣DK2不是就=平文?)
3.解密完後的DK2再加上key2後加密成為EK3
解密:
反推回去
對這方面實在不了解,所以懇請有經驗的前輩幫忙,謝謝
--------------------------------------------------------------------------
似乎自己發現了自己盲點在哪:
wiki中提到一句話:
3DES使用「密鑰包」,其包含3個DES密鑰,K1,K2和K3,均為56位(除去奇偶校驗位)
(不懂什麼是奇偶校驗位)
從這句話看來從新解一次加密過程
密文 = EK3(DK2(EK1(平文))
1.平文使用Key1 來做一次加密得到EK1
2.EK1使用Key2解密得到一次DK2
3.DK2使用Key3加密得到EK3 也就是最後要的加密密文
平文 = DK1(EK2(DK3(密文)))
1.將之前使用3DES加密的平文,使用key3解密一次得到DK3
2.將DK3使用key2加密一次,得到EK2
3.將EK2使用key1解密得到DK1 = 平文
以上是小弟的理解,錯誤請鞭小力點,
如果沒錯的話希望這段文章可以幫忙到以後有需要的人^^
-----------------------------------------------------------------
試了一下,直接使用上面所說的des文章,
照上面所想的做了一下,
發現在第一階段完後就會直接catch Exception後跳出了,
後來查閱了一下java中3des的做法
將DES.java檔中的
SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");
改為
SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DESede");
結果依然是在第二步的地方,要取得dk2的時候就跳到catch exception
(原因是因為dk2會=null)
不知道這裡下一步該怎麼解決...懇請大大們幫忙QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.192.224
※ 編輯: nightwolf013 來自: 59.120.192.224 (05/24 11:00)
※ 編輯: nightwolf013 來自: 59.120.192.224 (05/24 11:54)