歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java安全之對稱加密與非對稱加密

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. //  }  
Copyright © Linux教程網 All Rights Reserved