1.a.对称加密:加密和解密时用的密码一样 b.非对称加密:加密和解密用的密码不一样。作用(比如):加密的是公钥(好多人持有),解密的私钥(一个人持有),主要用在互联网上cipher加密security安全
2.一个类不能new时,用这个类的静态方法来获得它的实力对象3.对称加密的例子
package cn.cipher;/** * cipher的应用,加密和解密 */import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.ObjectOutputStream;import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;
public class cipher {
public static void main(String[] args) { //cipher(); Encrypt(); }
public static void cipher() { try { // 加入一个加密器,加密方式为DES Cipher cipher = Cipher.getInstance("DES"); // 生成一个key,它必须与加密器的加密方式一样 KeyGenerator keyGenerator = KeyGenerator.getInstance("DES"); // 得到这个key Key key = keyGenerator.generateKey(); // 初始化这个加密器 cipher.init(Cipher.ENCRYPT_MODE, key); // 下面这种方式是先给加密器中加入东西,然后再进行加密,分两步完成 /* * cipher.update("传智博客".getBytes()); cipher.update("黑马".getBytes()); * byte[] result=cipher.doFinal(); */ // 把给加密器中加东西和加密一起进行操作 byte[] result = cipher.doFinal("传智博客".getBytes());
// 解密 cipher.init(Cipher.DECRYPT_MODE, key); System.out.println(new String(cipher.doFinal(result))); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } } public static void Encrypt(){ try { Cipher cipher = Cipher.getInstance("DES"); KeyGenerator keyGenerator = KeyGenerator.getInstance("DES"); Key key = keyGenerator.generateKey(); //把key写进文件中 FileOutputStream fosKey=new FileOutputStream("key.txt"); ObjectOutputStream ois=new ObjectOutputStream(fosKey); ois.writeObject(key); ois.close(); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] result = cipher.doFinal("传智博客".getBytes()); //把加密后的二进制码写进文件中 FileOutputStream fosRs=new FileOutputStream("result.txt"); fosRs.write(result); fosRs.close(); cipher.init(Cipher.DECRYPT_MODE, key); String rs=new String(cipher.doFinal(result)); //把解码后的字符串写进文件中 File file=new File("decrypt.txt"); FileWriter fw=new FileWriter(file); fw.write(rs); fw.close(); System.out.println(rs); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
}