Java 非对称加密

 1 package test;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.ObjectInputStream;
 6 import java.io.ObjectOutputStream;
 7 import java.security.Key;
 8 import java.security.KeyPair;
 9 import java.security.KeyPairGenerator;
10
11 import javax.crypto.Cipher;
12
13 public class testcase {
14
15     public static void main(String[] args) throws Exception {
16         PublicEnrypt();
17         privateDecrypt();
18
19     }
20     //加密
21     public static void PublicEnrypt() throws Exception{
22         // 实例化加密工具,使用RSA算法
23         Cipher cipher=Cipher.getInstance("RSA");
24         // 实例化Key
25         KeyPairGenerator keypairGenerator=KeyPairGenerator.getInstance("RSA");
26         // 获得一对钥匙
27         KeyPair keyPair=keypairGenerator.generateKeyPair();
28         // 获取公钥
29         Key publicKey=keyPair.getPublic();
30         // 获取私钥
31         Key privateKey=keyPair.getPrivate();
32         // 用公钥加密
33         cipher.init(Cipher.ENCRYPT_MODE, publicKey);
34         byte []result =cipher.doFinal("数据内容".getBytes("UTF-8"));
35         // 将私钥写入文件
36         saveKey(privateKey,"zxx_private.key");
37         // 加密后的数据存储
38         saveData(result,"public_encryt.dat");
39         System.out.println(new String(result,"UTF-8"));
40     }
41     //解密
42     public static void privateDecrypt() throws Exception{
43         //实例化加密工具
44         Cipher cipher=Cipher.getInstance("RSA");
45         // 获取私钥
46         Key privateKey=readKey("zxx_private.key");
47         // 获取加密后的信息
48         byte[] src=readData("public_encryt.dat");
49         // 用私钥解密
50         cipher.init(Cipher.DECRYPT_MODE, privateKey);
51         byte[] result=cipher.doFinal(src);
52         System.out.println(new String(result,"UTF-8"));
53     }
54     // 保存数据
55     public static void saveData(byte[] result,String fileName) throws Exception{
56         FileOutputStream fosData=new FileOutputStream(fileName);
57         fosData.write(result);
58         fosData.close();
59     }
60     // 保存密钥
61     public static void saveKey(Key key,String fileName) throws Exception{
62         FileOutputStream fosKey=new FileOutputStream(fileName);
63         ObjectOutputStream oosSecretKey=new ObjectOutputStream(fosKey);
64         oosSecretKey.writeObject(key);
65         oosSecretKey.close();
66         fosKey.close();
67     }
68       //读取密钥
69     public static Key readKey(String fileName) throws Exception{
70         FileInputStream fisKey=new FileInputStream(fileName);
71         ObjectInputStream oisKey=new ObjectInputStream(fisKey);
72         Key key=(Key)oisKey.readObject();
73         oisKey.close();
74         fisKey.close();
75         return key;
76     }
77        // 读取数据
78     public static byte[] readData(String fileName) throws Exception{
79         FileInputStream fisDat=new FileInputStream(fileName);
80         byte[] src=new byte[fisDat.available()];
81         int len=fisDat.read(src);
82         int total=0;
83         while(total<src.length){
84             total+=len;
85             len=fisDat.read(src, total, src.length-total);
86         }
87         fisDat.close();
88          return src;
89     }
90
91 }
时间: 2024-08-24 05:30:13

Java 非对称加密的相关文章

java 非对称加密RSA

package com.aarony.test; import java.io.IOException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.sec

Java对称与非对称加密解密,AES与RSA

加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么要有非对称加密,解密技术呢 假设这样一种场景A要发送一段消息给B,但是又不想以明文发送,所以就需要对消息进行加密.如果采用对称加密技术,那么加密与解密用的是同一把秘钥.除非B事先就知道A的秘钥,并且保存好.这样才可以解密A发来的消息. 由于对称技术只有一把秘钥,所以秘钥的管理是一个很麻烦的问题.而非

Java Web 登录采用非对称加密(RSA算法)

登录时采用md5或者base64神马的加密都是不可靠的,被抓包了还是可以模拟登录的,基本没啥用,只能说好过没有... 接下来跟大家介绍下如何采用非对称加密,非对称加密的过程其实就是和https加密原理一样,我的处理过程是这样: a. 在登录页面生成公钥和私钥,将私钥存在sesion中 b.公钥用于前端页面对数据进行加密 c.将数据传输给后台,后台从session中拿到私钥,然后对数据进行解密,把session中的私钥删除 下面简单记录下实现过程,具体的工具类RSAUtils.java的实现不在这

RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密

最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的内容吧 很多对安全要求比较高的应用都要使用加密,加密后与后端沟通数据,这样能防止被别人截获数据包,直接把借口的参数数据暴露.我上一家公司是做P2P互联网金融的,就使用了多种加密方式,有对称的也有非对称的.最近新公司的APP也有意向使用加密,思考了一下,最成熟的解决方案就是使用RSA非对称的加密了.就

RSA非对称加密Java实现

原文 加密基础方法类 1 import java.security.MessageDigest; 2 import sun.misc.BASE64Decoder; 3 import sun.misc.BASE64Encoder; 4 public class SecurityBase { 5 public static final String KEY_SHA="SHA"; 6 public static final String KEY_MD5="MD5"; 7

java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术,即node.js做前端,spring boot做后端.于是,我开始搜索有关node.js与java实现非对称加密的资料,然而,我却没有得到一个满意的答案.因此,我有了写本篇博客的想法,并希望给用到这类技术的朋友提供帮助. 一.明文密码传输对比 首先. 构建spring boot 2.0项目 引入we

RSA,JAVA私钥加密,C#公钥解密

做这个东西在坑里爬了3天才爬出来,记录下供园友参考.C#程序员一枚,项目需要和Java做数据交互,对方甩了段密文和一个CER证书给我,然后我要对其密文进行解密. RSA 非对称加密,对方用私钥加密,我用公钥解密.关于证书的一点说明:证书类型有两种 .pfx 和 .cer ,其中 .pfx 证书既包含公钥也包含私钥, 而 .cer 证书只包含公钥. C#默认RSA只支持公钥加密,私钥解密.而现在的需求正好相反,因此想要直接用C#内置加密类肯定是行不通的.而且C#和Java的RSA加密并不互通.经过

再谈加密-RSA非对称加密的理解和使用

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

对称加密与非对称加密

(一)对称加密(Symmetric Cryptography) 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB