Java安全之对称加密与非对称加密

企鹅博客 2019年7月20日04:57:32 评论 2,079

Java中加密分为两种方式一个是对称加密,另一个是非对称加密。对称加密是因为加密和解密的钥匙相同,而非对称加密是加密和解密的钥匙不同。

对称加密与非对称加密的区别:

对称加密称为密钥加密,速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道密钥。

  1.     /* 
  2.      * 对称加密 
  3.      */  
  4.     private static void secretEncrypt() throws Exception {  
  5.         //使用Cipher的实例   
  6.         Cipher cipher =Cipher.getInstance("AES");  
  7.           
  8.         //得到加密的钥匙   
  9.         SecretKey key =KeyGenerator.getInstance("AES").generateKey();  
  10.           
  11.         //初始化加密操作,传递加密的钥匙   
  12.         cipher.init(Cipher.ENCRYPT_MODE,key);  
  13.           
  14.         //将加密的钥匙写入secretKey.key文件中   
  15.         FileOutputStream fosKey=new FileOutputStream("secretKey.key");  
  16.         ObjectOutputStream oosSecretKey =new ObjectOutputStream(fosKey);  
  17.         oosSecretKey.writeObject(key);  
  18.         oosSecretKey.close();  
  19.         fosKey.close();  
  20.            
  21.          //将加密的内容传递进去,返回加密后的二进制数据   
  22.         byte [] results =cipher.doFinal("哈哈哈哈哈".getBytes());  
  23.           
  24.         //将加密后的二进制数据写入到secretContent.dat文件中   
  25.         FileOutputStream fosData=new FileOutputStream("secretContent.dat");  
  26.         fosData.write(results);  
  27.         fosData.close();  
  28.     }  
  29.       
  30.     /* 
  31.      * 对称解密 
  32.      */  
  33.     private static void secretDecrypt() throws Exception{  
  34.         Cipher cipher =Cipher.getInstance("AES");  
  35.           
  36.         //获取文件中的key进行解密   
  37.         FileInputStream fisKey=new FileInputStream("secretKey.key");  
  38.         ObjectInputStream oisKey =new ObjectInputStream(fisKey);  
  39.         Key key =(Key)oisKey.readObject();  
  40.         oisKey.close();  
  41.         fisKey.close();  
  42.           
  43.         //初始化解密操作,传递加密的钥匙   
  44.         cipher.init(Cipher.DECRYPT_MODE,key);  
  45.           
  46.         //获取文件中的二进制数据   
  47.         FileInputStream fisDat=new FileInputStream("secretContent.dat");  
  48.         //获取数据第一种方式   
  49.         byte [] src=new byte [fisDat.available()];  
  50.         int len =fisDat.read(src);  
  51.         int total =0;  
  52.         while(total<src.length){  
  53.             total +=len;  
  54.             len=fisDat.read(src,total,src.length-total);  
  55.         }  
  56.         //执行解密   
  57.         byte [] result=cipher.doFinal(src);  
  58.         fisDat.close();  
  59.         System.out.println(new String(result));  
  60.           
  61. //      读文件中的数据第二种方式   
  62. //      ByteArrayOutputStream baos =new ByteArrayOutputStream();   
  63. //      copyStream(fisDat, baos);   
  64. //      byte [] result=cipher.doFinal(baos.toByteArray());   
  65. //      fisDat.close();   
  66. //      baos.close();   
  67.     }  
  68.       
  69. //  private static void copyStream(InputStream ips,OutputStream ops) throws Exception{   
  70. //      byte [] buf =new byte[1024];   
  71. //      int len=ips.read(buf);   
  72. //      while(len!=-1){   
  73. //          ops.write(buf,0,len);   
  74. //          len  =ips.read(buf);   
  75. //      }   
  76. //  }  
weinxin
欢迎加入中国SEO站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
企鹅博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: