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

企鹅博客
19053
文章
0
评论
2019年7月20日04:57:32 评论 2.4K views 2583字阅读8分36秒

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. //  }  
继续阅读
  • 版权声明: 发表于 2019年7月20日04:57:32
  • 转载注明:https://www.qieseo.com/172152.html
OpenCV机器学习库MLL Linux编程

OpenCV机器学习库MLL

学习机器学习的时候,基本都是在用Matlab、Python写算法,做测试; 由于最近要用OpenCV写作业,兴起看了看OpenCV的机器学习模块(The Machine Learning Librar...
matlab矩阵中如何去掉重复的行? Linux编程

matlab矩阵中如何去掉重复的行?

近来用matlab编程遇到了这样两个问题,如有以下矩阵: IDX = ; 问题1)怎样去掉其中的重复行呢? 在网上找了半天,大家都提供的是自己写的循环。我在想,这样简单的问题matlab肯定提供了基础...
Java基础知识:GUI之事件处理 Linux编程

Java基础知识:GUI之事件处理

  事件处理可以简单地这么理解,当有一个事件产生,程序要根据这个事件做出响应。比如,我们做了一个可以通过按钮改变背景颜色的窗口,当我们点击按钮时便产生了一个事件,程序会根据这个事件来做出响应,也就是去...
匿名

发表评论

匿名网友 填写信息

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