package test;

 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator; import javax.crypto.Cipher; public class testcase { public static void main(String[] args) throws Exception {
PublicEnrypt();
privateDecrypt(); }
//加密
public static void PublicEnrypt() throws Exception{
// 实例化加密工具,使用RSA算法
Cipher cipher=Cipher.getInstance("RSA");
// 实例化Key
KeyPairGenerator keypairGenerator=KeyPairGenerator.getInstance("RSA");
// 获得一对钥匙
KeyPair keyPair=keypairGenerator.generateKeyPair();
// 获取公钥
Key publicKey=keyPair.getPublic();
// 获取私钥
Key privateKey=keyPair.getPrivate();
// 用公钥加密
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte []result =cipher.doFinal("数据内容".getBytes("UTF-8"));
// 将私钥写入文件
saveKey(privateKey,"zxx_private.key");
// 加密后的数据存储
saveData(result,"public_encryt.dat");
System.out.println(new String(result,"UTF-8"));
}
//解密
public static void privateDecrypt() throws Exception{
//实例化加密工具
Cipher cipher=Cipher.getInstance("RSA");
// 获取私钥
Key privateKey=readKey("zxx_private.key");
// 获取加密后的信息
byte[] src=readData("public_encryt.dat");
// 用私钥解密
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result=cipher.doFinal(src);
System.out.println(new String(result,"UTF-8"));
}
// 保存数据
public static void saveData(byte[] result,String fileName) throws Exception{
FileOutputStream fosData=new FileOutputStream(fileName);
fosData.write(result);
fosData.close();
}
// 保存密钥
public static void saveKey(Key key,String fileName) throws Exception{
FileOutputStream fosKey=new FileOutputStream(fileName);
ObjectOutputStream oosSecretKey=new ObjectOutputStream(fosKey);
oosSecretKey.writeObject(key);
oosSecretKey.close();
fosKey.close();
}
//读取密钥
public static Key readKey(String fileName) throws Exception{
FileInputStream fisKey=new FileInputStream(fileName);
ObjectInputStream oisKey=new ObjectInputStream(fisKey);
Key key=(Key)oisKey.readObject();
oisKey.close();
fisKey.close();
return key;
}
// 读取数据
public static byte[] readData(String fileName) throws Exception{
FileInputStream fisDat=new FileInputStream(fileName);
byte[] src=new byte[fisDat.available()];
int len=fisDat.read(src);
int total=0;
while(total<src.length){
total+=len;
len=fisDat.read(src, total, src.length-total);
}
fisDat.close();
return src;
} }

Java 非对称加密的更多相关文章

  1. JAVA 非对称加密工具

    import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...

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

    最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的 ...

  3. Java安全之对称加密、非对称加密、数字签名

    原文地址: http://blog.csdn.net/furongkang/article/details/6882039 Java中加密分为两种方式一个是对称加密,另一个是非对称加密.对称加密是因为 ...

  4. RSA非对称加密Java实现

    原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...

  5. RSA非对称加密简析-java

    1 非对称加密算法 1.1 概述 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这 ...

  6. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

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

    前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...

  8. java中的数据加密3 非对称加密

    非对称加密也加公钥加密,不对称算法使用一对密钥对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能解开(可用于加密):同时,使用私钥加密的数据,只有公钥能解开(签名).但是速度很慢(比私钥加密慢10 ...

  9. 使用 RSA 非对称加密保证数据不被篡改 java 例子代码

    原理: 对原始数据 生成有序的json 字符串,然后取 摘要,然后 对摘要 进项 分对称加密.( 不对原数据加密是应为 原数据太大,加解密速度太慢,非对称加密都不 挺慢的.在摘要函数具有雪崩效应 ,原 ...

随机推荐

  1. unicode下各种类型转换CString、string

    把最近用到的各种unicode下类型转换总结了一下: 1.string转CString string a=”abc”; CString str=CString(a.c_str()); 或str.for ...

  2. java线程(3)-多线程死锁

    产生死锁的条件: 1.有至少一个资源不能共享2.至少有一个任务必须持有一个资源并且等待获取另一个被别的任务持有的资源3.资源不能任务抢占4.必须有循环等待 package com.thread; /* ...

  3. Asp.Net 前后台交互小结

    转自:http://blog.csdn.net/wlccomeon/article/details/17270427 一.前台调用后台           前台调用后台的方法一共可分为两大类:使用Ht ...

  4. 基础算法(二分,贪心):NOIP 2012 疫情控制

    题目大意 给出一棵n个节点的树,根是1,要在除根节点以外的点建立检查点,使得从每条根到叶子的路径上都至少存在一个检查点.检查点由军队来建立.初始军队的位置是给定的,移动军队走一条边需要花费这条边的权值 ...

  5. OnClientClick事件

    1.OnClientClick="return  validation()"   //注意return 2.//默认情况下返回true function validation() ...

  6. HDJ -- 1022

    #include<iostream> #include<cstdio> #include<string> #define MAXN 10 using namespa ...

  7. Eclipse&Spring开发开发环境配置

    下载Eclipse,打开http://www.eclipse.org/downloads/,选择J2EE开发版: 根据操作系统选择32位还是64位. 开发工具:SpringSource Tool Su ...

  8. 理解wait notify的好例子

    import java.util.concurrent.TimeUnit; public class Example2 { /** * @param args */ public static voi ...

  9. lfs遇到的一些问题--后续阶段

    1.安装GPM-1.20.7,make install出错: prog/display-buttons.c:39:57: 致命错误:gpm.h:没有那个文件或目录 #include <gpm.h ...

  10. CF 294C(Java大数做计数)

    题目链接:http://codeforces.com/contest/294/problem/C 代码: import java.util.*; import java.math.*; public ...