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. linux中nginx的安装,linux的版本是ubutu

    linux环境下,安装nginx,报错如下: the HTTP rewrite module requires the PCRE library. 1.需要安装pcre,报一下错误: you need ...

  2. Oracle core06_latch&lock

    lock and latch 在oracle中为了保护共享资源,使用了两种不同的锁机制lock和latch,这两种锁有明显不同点: 1,lock和pin,采用的是队列的方式,先来先服务的策略,latc ...

  3. Cocos2d-x 坑之一:Xcode文件真实目录与工程视图目录

    Cocos2d-x一定要保证 Xcode文件真实目录与工程视图目录 的一致性,不然,会出现文件读取不了,或include不了的情况. 如果出现此类情况,优先查看真实目录的结构.

  4. Muduo源码库研究(笔记汇总)

    声明: 本人学习Muduo源码, 有些代码会对其进行精简, 加上本人的一些理解, 所以与作者的代码可能有些不同. 如有理解错误的地方欢指出. Muduo基础库-时间戳类 http://www.cnbl ...

  5. IE浏览器Ajax缓存问题小结

    IE浏览器Ajax缓存问题 在IE下使用ajax的get方法向后台请求数据时,如果请求URL与之前完全一样,则根本不想后台获取,直接返回上一次请求缓存的数据(在缓存过期之前,针对相同地址发起的多个Aj ...

  6. 如何当好党支部书记 z

    如何当好党支部书记 党支部书记是党支部一班人的“班长”,一个党支部是否具有坚强的战斗力,能否发挥好战斗堡垒作用,在很大程度上取决于是不是有一个得力的支部书记.在改 革开放,全面建设小康社会,构建社会主 ...

  7. B. Fixed Points

    B. Fixed Points time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  8. python 零散记录(二) 序列的相关操作 相加 相乘 改变 复制

    序列相加: [1,2] + [3,4] == [1,2,3,4] #字符串也是序列的一种 'hello' + 'world' == 'hello world' #但是序列相加只限于相同类型的序列间相加 ...

  9. 文件上传工具swfupload[转]

    转至:http://zhangqgc.iteye.com/blog/906419 文件上传工具swfupload 示例: 1.JavaScript设置SWFUpload部分(与官方例子类似): var ...

  10. JMS消息类型模型

    JMS有两种消息类型模型,一种是P2P(Point To Point), 另一种是Pub/Sub(Publisher/Subscriber),二者之间的主要区别在于消息是否支持重复消费. P2P模型中 ...