看板 AndroidDev 關於我們 聯絡資訊
小弟有事先看過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)