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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP