Re: [問題] 有關於triple des加解密
: 試了一下,直接使用上面所說的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
java有支援DESede的加解密模式,所以把程式改成下面這樣應該就可以了
先產生一把3DES的Key (168 bits)
public static String encrypt3DES (String encryptString, String encryptKey)
throws Exception {
SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DESede");
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
return Base64.encode(encryptedData);
}
要測試有沒有問題,先加密再解密,看最後輸出的字串或byte和一開始的
有沒有相同就知道了。
如果要使用mode和padding,要改 Cipher.getInstance 的輸入字串
ex. Cipher.getInstance("DESede/CBC/PKCS5Padding")
字串的格式是 "algorithm/mode/padding"
java有支援的加解密方法可參考 http://ppt.cc/meL@
如果有選mode,有些mode(如CBC, CFB, OFB..)
需要輸入 initialization vector (iv)
這時候就要產生iv,和你po的文件一樣,然後init時要加入
IvParameterSpec zeroIv = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
使用mode是要提高安全性,基本的block cipher (DES, 3DES, AES, ...) 有缺點,
同樣的明文,加密後的密文是相同的,所以可以觀查密文相同字串的出現率,
推測出可能的明文字串,像英文中有一些字母使用率很高,
可以發現相同的密文一直出現,為改善這個缺點,才會有各種加密mode的產生。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.192.21.123
推
05/25 09:50, , 1F
05/25 09:50, 1F
→
05/25 09:51, , 2F
05/25 09:51, 2F
→
05/25 13:20, , 3F
05/25 13:20, 3F
→
05/25 13:24, , 4F
05/25 13:24, 4F
→
05/25 13:27, , 5F
05/25 13:27, 5F
推
05/25 14:24, , 6F
05/25 14:24, 6F
→
05/25 14:25, , 7F
05/25 14:25, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章