java文件加密
2015-07-11 22:45
375 查看
package utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.GeneralSecurityException; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.SecretKeySpec; //import lantrack.common.config.Config; public class des { // public String keyFile = (new StringBuilder(Config.EWEBEDIT_UPLOAD_PATH)).append("\\xfaj\\moban\\key.txt").toString(); public String keyFile="D:\\code.txt"; // public String getKeyFile(){ // return this.keyFile; // } // // public void setKeyFile(String keyFile){ // this.keyFile=keyFile; // } //用java生成一个key并保存到一个二进制文件中去的方法如下: public static void saveBytePriveKey(String file) { try { // String keyString="de23a211"; // byte[] keyData=keyString.getBytes(); // SecretKey key=new SecretKeySpec(keyData,"DES"); // System.out.println("key1====="+key.toString()); KeyGenerator keyGen = KeyGenerator.getInstance("DES"); SecretKey key = keyGen.generateKey();// 生成私钥Key System.out.println("key2====="+key.toString()); //key2=====com.sun.crypto.provider.DESKey@1805a FileOutputStream fop = new FileOutputStream(file); fop.write(key.getEncoded()); fop.close(); } catch (Exception e1) { e1.printStackTrace(); } } //从密钥文件中读取内容生成密钥 public static SecretKey getBytePriveKey(String file) throws Exception { File keyf = new File(file); long length = keyf.length(); byte[] bytes = new byte[(int) length]; FileInputStream fis = new FileInputStream(keyf); // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead = fis.read(bytes, offset, bytes.length - offset)) >= 0) { offset += numRead; } DESKeySpec dks = new DESKeySpec(bytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); System.out.println("key3===="+key); return key; } //文件加密 public static void encryptFile(String plainFile, String encryptedFile, String keyFile) { try { SecretKey key = getBytePriveKey(keyFile); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key); FileInputStream fis = new FileInputStream(plainFile); FileOutputStream fos = new FileOutputStream(encryptedFile); crypt(fis, fos, cipher); fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static void crypt(InputStream in, OutputStream out, Cipher cipher) throws IOException, GeneralSecurityException { int blockSize = cipher.getBlockSize(); int outputSize = cipher.getOutputSize(blockSize); System.out.println("blockSize " + blockSize + " outputSize" + outputSize); byte[] inBytes = new byte[blockSize]; byte[] outBytes = new byte[outputSize]; int inLength = 0; boolean more = true; while (more) { inLength = in.read(inBytes); if (inLength == blockSize) { int outLength = cipher.update(inBytes, 0, blockSize, outBytes);//加密流的解密 out.write(outBytes, 0, outLength); } else { more = false; } } if (inLength > 0) outBytes = cipher.doFinal(inBytes, 0, inLength); else outBytes = cipher.doFinal(); out.write(outBytes); } //文件解密 public static void decryptFile(String encryptedFile, String decryptedFile, String keyFile) { try { SecretKey key = getBytePriveKey(keyFile); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key); FileInputStream fis = new FileInputStream(encryptedFile); FileOutputStream fos = new FileOutputStream(decryptedFile); crypt(fis, fos, cipher); fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { des fk= new des(); //String keyFile=fk.getKeyFile(); String keyFile="D:\\code.txt"; String plainFile="D:\\test.docx"; String encryptedFile="D:\\jiami.docx"; // // // fk.encryptFile(plainFile, encryptedFile, keyFile); //解密文件地址 // String path="D:\\jiemi.docx"; // System.out.println(path); // fk.decryptFile(encryptedFile, path, keyFile); fk.saveBytePriveKey("D:\\savekey.txt"); fk.getBytePriveKey("D:\\getkey.txt"); } }
savekey和getkey两个方法暂时没有用到。
本地对txt格式和word格式测试过,其中word中有图片的也测试过。
转:http://www.oschina.net/code/snippet_945123_23891
相关文章推荐
- 兔子-eclipse的show view失效了
- Java面向对象思想体验
- java发送邮件
- [FMG]ADT-eclipse升级为可以添加javaWeb
- Error:java: Compilation failed: internal java comp
- 个人关于JAVA异常的心得
- R.java 文件的错误
- Java学习笔记
- Java: 异常处理机制
- 学习笔记_Filter小结(过滤器JavaWeb三大组件之一)
- 学习笔记_过滤器详细_2(过滤器JavaWeb三大组件之一)
- java.lang.UnsupportedClassVersionError
- Java 静态内部类与非静态内部类 学习记录.
- Java学习笔记3、变量、数据类型
- 解决windows下eclipse中android项目关联android library project失败问题
- 关于java集合的总结
- JavaBean,POJO,EJB 是什么?
- Struts2 常见错误 Document is invalid: no grammar found. at (null:3:8)
- spring mvc
- 使用MyEclipse来开发servlet