Java 非对称加密
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 非对称加密的更多相关文章
- JAVA 非对称加密工具
import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...
- RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密
最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的 ...
- Java安全之对称加密、非对称加密、数字签名
原文地址: http://blog.csdn.net/furongkang/article/details/6882039 Java中加密分为两种方式一个是对称加密,另一个是非对称加密.对称加密是因为 ...
- RSA非对称加密Java实现
原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...
- RSA非对称加密简析-java
1 非对称加密算法 1.1 概述 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这 ...
- Java加密与解密笔记(三) 非对称加密
非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...
- java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全
前言 在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...
- java中的数据加密3 非对称加密
非对称加密也加公钥加密,不对称算法使用一对密钥对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能解开(可用于加密):同时,使用私钥加密的数据,只有公钥能解开(签名).但是速度很慢(比私钥加密慢10 ...
- 使用 RSA 非对称加密保证数据不被篡改 java 例子代码
原理: 对原始数据 生成有序的json 字符串,然后取 摘要,然后 对摘要 进项 分对称加密.( 不对原数据加密是应为 原数据太大,加解密速度太慢,非对称加密都不 挺慢的.在摘要函数具有雪崩效应 ,原 ...
随机推荐
- unicode下各种类型转换CString、string
把最近用到的各种unicode下类型转换总结了一下: 1.string转CString string a=”abc”; CString str=CString(a.c_str()); 或str.for ...
- linux 复制文件时,报cp: omitting directory `XXX'
今天在用linux命令进行文件复制时omitting cp -i BBS /opt/workspace/apache-tomcat-6,参数用的是 -i),所以也不太熟悉,原来,还有子目录文件,而是必 ...
- poj2104
裸的主席树,没什么好说的 type node=record l,r,s:longint; end; ..] of node; sa,rank,a,b,sum,head: ...
- 总结@ 在C# 中的用法
一 字符串中的用法 1.地球人都知道 C# 中 字符串常量可以以 @ 开头声名,这样的优点是转义序列“不”被处理,按“原样”输出,即我们不需要对转义字符加上 \ (反斜扛),就可以轻松coding.如 ...
- SQL Server数据库存在判断语句及系统表简介 转
Transact-SQL Exists Sentences--判断数据库是否存在IF EXISTS(SELECT * FROM master.sysdatabases WHERE name=N'库名' ...
- [SDJX2015]面积
[问题描述:] 一个六边形的每个内角均为120°,按顺时针给定它每条边的长度,求它的面积与边长为1的等边三角形的面积的比值. [输入:] 一行六个整数a,b,c,d,e,f,表示六条边的长度. [输出 ...
- yum puppet 并整合控制台
上篇说了下在ubuntu12.04上安装puppet,安装的版本为puppet2.7.11版本,今天尝试了下在CentOS6.4系统上安装puppet 3.1.1版本,本文参考chenshake的文章 ...
- Mitmproxy首页、文档和下载 - 支持SSL的HTTP代理 - 开源中国社区
Mitmproxy首页.文档和下载 - 支持SSL的HTTP代理 - 开源中国社区 undefined 利用Dnspod api批量更新添加DNS解析[python脚本] - 推酷 undefined
- java第一章到第四章
class HelloWorld{ public static void main(String [] arguments) { System.out.println("Hello Worl ...
- Android五大布局重新回顾