netbeans8.1
新建一个java项目,项目的名称为javades。
打开这个javades文件,在其中定义一个静态方法getkey,把des算法的key的8的字节生成。 private static SecretKey getkey(byte[] key){ try { DESKeySpec ks=new DESKeySpec(key); SecretKeyFactory kf=SecretKeyFactory.getInstance('des'); SecretKey sk=kf.generateSecret(ks); return sk; } catch (InvalidKeyException | InvalidKeySpecException | NoSuchAlgorithmException ex) { Logger.getLogger(Javades.class.getName()).log(Level.SEVERE, null, ex); } return null; }
定义一个解密方法: private static byte[] decrypt(byte[]data,String key){ try { SecretKey sk=getkey(key.getBytes()); Cipher ch=Cipher.getInstance('des'); ch.init(Cipher.DECRYPT_MODE, sk); return ch.doFinal(data); } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex) { Logger.getLogger(Javades.class.getName()).log(Level.SEVERE, null, ex); } return null; }
定义加密方法: try { SecretKey sk=getkey(key.getBytes()); Cipher ch = Cipher.getInstance('des'); ch.init(Cipher.ENCRYPT_MODE, sk); return ch.doFinal(data); } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex) { Logger.getLogger(Javades.class.getName()).log(Level.SEVERE, null, ex); } return null; }
在main方法中加密一个字符串和解密一个字符串: String key='12345678'; String data='abc123456890'; System.err.println('data:'+data); byte[] jmdata=Javades.encrypt(data.getBytes(), key); System.err.println(Arrays.toString(jmdata)); jm=Javades.decrypt(jm, pw); System.err.println(new String(jm));
运行项目,结果把字符串des加密,还原字符串成功。
这个在对文件加密:String key='12345678'; try { File fi=new File('c:/data.txt'); InputStream input = new FileInputStream(fi); byte[] data = new byte[input.available()]; input.read(data); System.err.println('data:'+data); byte[] jmdata=Javades.encrypt(data, key); System.err.println('加密数据:'+Arrays.toString(jmdata)); byte[] jmjm=Javades.decrypt(jmdata, key); System.err.println('解密数据:'+new String(jmjm,'UTF-8')); } catch (FileNotFoundException ex) { Logger.getLogger(Javades.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Javades.class.getName()).log(Level.SEVERE, null, ex); }
运行项目,对文件byte[]的数据加密和解密成功。