java 板


LINE

※ 引述《reon (完成這條天堂路)》之銘言: : ※ 引述《jet113102 (傳說中的Yi)》之銘言: : : 小弟在網路上有找到AES加密的source code : : 然而他是以字串去處理的 : : 我把它改成其他的檔案 (EX:JPEG) 之類的使他強制讀取文字後加密 : : 加密沒出問題, 但解密時出現了錯誤= = : : javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 : : when decrypting with padded cipher : : 我似乎太天真了 囧... : : 如果說我要進行加解密有辦法以檔案直接做嗎? : : 還是說以讀取字串的方法進行修改即可? : 感覺你講的沒很清楚 : 如果你要用AES加密 那Java本身就有了 不需要額外去找Source Code吧? : 因為Java本身支援的加解密已經頗完整了 : 我覺得你解不出來是不是 你把密文 用同樣的key 加密的souce code來解密? : AES雖然是對稱式加密 但是加密和解密函式不同!! 不要被DES誤導 : DES才是加密和解密函式相同!! : 要用Java內建的AES加密 資料必須是byte array型態 : 有興趣的話自己去看一下歐萊禮出的 JAVA安全防護 和 官網JCA guide 大家好!我又來了.... 剛剛把有關加解密串流的類別稍微看了一下: Cipher, CipherInputStream, CipherOutputStream, KeyGenerator 消化之後,變成下面的程式碼,把字串加密至檔案,再從該檔案解密至另一個檔案。 public static void main(String[] args) throws Exception { // 產生 AES 專用的鑰匙,以後加密解密都用這一把。 Key key = KeyGenerator.getInstance("AES").generateKey(); // 加解密的演算法是 AES, 模式是 CBC, 填充是 PKCS5Padding String transformation = "AES/CBC/PKCS5Padding"; // 依上述演算法、模式與填充的方法建立一個加密器 Cipher encryption = Cipher.getInstance(transformation); encryption.init(Cipher.ENCRYPT_MODE, key); // 依上述演算法、模式與填充的方法建立一個解密器 Cipher decryption = Cipher.getInstance(transformation); decryption.init(Cipher.DECRYPT_MODE, key, encryption.getParameters()); // 開始加密的示範 encrypt(encryption, key); // 開始解密的示範 decrypt(decryption, key); // 執行完之後來個 OK! System.out.println("OK!"); } private static void encrypt(Cipher encryption, Key key) throws Exception { // 建立加密的檔案輸出串流,放置加密後的資料,檔名為 test.txt FileOutputStream fos = new FileOutputStream(new File("test.txt")); CipherOutputStream cos = new CipherOutputStream(fos, encryption); // 即將要被加密的訊息 String messages[] = { "BOOK", "DESK" }; // 寫入檔案串流中 for (int i = 0; i < messages.length; i++) { cos.write(messages[i].getBytes()); } // 把該關的關一關 cos.flush(); cos.close(); fos.close(); } private static void decrypt(Cipher decryption, Key key) throws Exception { // 建立解密的檔案輸入串流,檔名為 test.txt FileInputStream fis = new FileInputStream(new File("test.txt")); CipherInputStream cis = new CipherInputStream(fis, decryption); // 建立檔案輸出串流,放置解密之後的結果,檔名為 result.txt FileOutputStream fos = new FileOutputStream(new File("result.txt")); // 把那些從 test.txt 讀到的東西寫到 result.txt while (fis.available() > 0) { byte[] buffer = new byte[1024]; int length = cis.read(buffer); fos.write(buffer, 0, length); } // 把該關的東西關一關 fos.flush(); fos.close(); fis.close(); cis.close(); } 打開 test.txt 一看,結果是亂碼: ,?軱v?wg ?M絃 然而 result.txt 十分正常: BOOKDESK 如果想要加密其他的東西,只要有辦法把資料轉換至 byte[] 就可以了! 或者您可以利用 OutputStream 本身的裝飾者模式,利用衍生的裝飾者來做加密。 舉例而言: new ObjectOutputStream(new CipherOutputStream(..., ...)) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP