文档章节

java 私钥加密解密的例子

zplswf
 zplswf
发布于 2013/12/25 21:39
字数 631
阅读 292
收藏 1
点赞 0
评论 0
package com.rsa.zpl;
import java.io.FileOutputStream; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.SecureRandom; 
import java.util.Date;
/**
 * 生成公钥和私钥
 * @author zpl
 *
 */
public class GenKeys {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 
        SecureRandom secureRandom = new SecureRandom(new Date().toString().getBytes());
        keyPairGenerator.initialize(1024, secureRandom);
        KeyPair keyPair = keyPairGenerator.genKeyPair();
        String publicKeyFilename = "D:/publicKeyFile";
        byte[] publicKeyBytes = keyPair.getPublic().getEncoded();
        FileOutputStream fos = new FileOutputStream(publicKeyFilename); 
        fos.write(publicKeyBytes); 
        fos.close();
        String privateKeyFilename = "D:/privateKeyFile"; 
        byte[] privateKeyBytes = keyPair.getPrivate().getEncoded();
        fos = new FileOutputStream(privateKeyFilename); 
        fos.write(privateKeyBytes); 
        fos.close();
    }
}

package com.rsa.zpl;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
/**
 * 获取私钥
 * @author zpl
 *
 */
public class PrivateKeyReader {    
    public static PrivateKey get(String filename)throws Exception {
        File f = new File(filename);
        FileInputStream fis = new FileInputStream(f);
        DataInputStream dis = new DataInputStream(fis);
        byte[] keyBytes = new byte[(int)f.length()];
        dis.readFully(keyBytes);
        dis.close();
        PKCS8EncodedKeySpec spec =new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(spec);
      }

    
    public static void main(String[] args) throws Exception, InvalidKeySpecException, IOException {
        System.out.println(PrivateKeyReader.get("d:/privateKeyFile"));
    }
}


package com.rsa.zpl;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.security.KeyFactory;
/**
 * 获取私钥
 * @author zpl
 *
 */
public class PublicKeyReader {    
    public static PublicKey get(String filename) throws Exception {
        File f = new File(filename);
        FileInputStream fis = new FileInputStream(f); 
        DataInputStream dis = new DataInputStream(fis);
        byte[] keyBytes = new byte[(int)f.length()]; 
        dis.readFully(keyBytes); 
        dis.close();
        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA"); 
        return kf.generatePublic(spec);
    }
    public static void main(String[] args) {
    	try {
			System.out.println(get("D:\\publicKeyFile"));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


}


package com.rsa.zpl;

import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
/**
 * 公钥加密,私钥解密
 * @author zpl
 *
 */
public class TestEncryptAndDecrypt {    
    public static void main(String[] args) throws Exception {
    	//测试公钥加密,私钥解密
        String input = "thisIsMyPassword$7788";
        RSAPublicKey pubKey = (RSAPublicKey) PublicKeyReader.get("d:/publicKeyFile");
        
        
        Cipher cipher = Cipher.getInstance("RSA");        
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] cipherText = cipher.doFinal(input.getBytes());
        //加密后的东西
//        System.out.println("cipher: " + new String(cipherText));
        
        Cipher cipher1 = Cipher.getInstance("RSA");  
        RSAPrivateKey privKey = (RSAPrivateKey) PrivateKeyReader.get("d:/privateKeyFile");
        //开始解密
        cipher1.init(Cipher.DECRYPT_MODE, privKey); 
        byte[] plainText = cipher1.doFinal(cipherText);
        System.out.println("plain : " + new String(plainText));
    }

}




package com.rsa.zpl;

import java.io.InputStream;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import org.apache.commons.io.IOUtils;
/**
 * 公钥解密,私钥加密
 * @author zpl
 *
 */
public class TestEncryptAndDecrypt {    
    public static void main(String[] args) throws Exception {
    	//加密部分*****************************************************8
        String input = "thisIsMyPassword$zpl";
        //RSAPublicKey pubKey = (RSAPublicKey) PublicKeyReader.get("d:/publicKeyFile");// 这是公钥加密的
        RSAPrivateKey privKey = (RSAPrivateKey) PrivateKeyReader.get("D:/privateKeyFile");// 这是私钥加密的
        Cipher cipher = Cipher.getInstance("RSA");        
        cipher.init(Cipher.ENCRYPT_MODE, privKey);
        byte[] cipherText = cipher.doFinal(input.getBytes());
        //加密后的东西
        System.out.println("******************以上是加密部分cipher: " + new String(cipherText));
        
        
        // 解密部分 *****************************************************
        Cipher cipher1 = Cipher.getInstance("RSA"); 
        RSAPublicKey pubKey = (RSAPublicKey)get(TestEncryptAndDecrypt.class.getResourceAsStream("publicKeyFile"));// 公钥解密
//        RSAPublicKey pubKey = (RSAPublicKey) PublicKeyReader.get("d:/publicKeyFile");// 公钥解密
       // RSAPrivateKey privKey = (RSAPrivateKey) PrivateKeyReader.get("d:/privateKeyFile");//私钥解密用这个
        //开始解密
        cipher1.init(Cipher.DECRYPT_MODE, pubKey); 
        byte[] plainText = cipher1.doFinal(cipherText);
        System.out.println("plain : " + new String(plainText));
    }
    
    public static PublicKey get(InputStream inputStream) throws Exception {
 	byte[] keyBytes = IOUtils.toByteArray(inputStream);
      X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
      KeyFactory kf = KeyFactory.getInstance("RSA"); 
      return kf.generatePublic(spec);
  }

}

cipher: 硤購镊爮x迨茦A吾 C ?承 蒹?{{"C闥牖S卭学???滏?配鶫?b 風
rNT   AZ? 埖\探7oQ|X瓌9螿0 暗沌3达鲓8鼢?邆?G繬 ?貶
??
plain : thisIsMyPassword$zpl

生成这样,说明是正确的


© 著作权归作者所有

共有 人打赏支持
zplswf
粉丝 54
博文 44
码字总数 5560
作品 0
郑州
高级程序员
Java加密技术(七)——非对称加密算法最高级ECC

Java加密技术(七)——非对称加密算法最高级ECC 博客分类: Java/Security Java非对称加密算法ECC ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对...

脸大的都是胖纸
2015/03/19
0
0
浅析RSA公钥密码以及使用Java自带API实现RSA的密钥生成和加解密

RSA是目前最流行的非对称密码,目前广泛应用在数字签名,数字证书上。 那么什么是非对称密码呢?就是给明文加密的密钥和给密文解密的密钥是不一样的。其中,对外暴露的是公钥,自己保留的是私...

Lunqi
2015/07/15
0
1
Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C
05/08
0
0
Java加密技术(七)——非对称加密算法最高级ECC

ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。在软件注册保护方面起到很大的作用,一般的序列号通常由该算法...

mrliuze
2015/05/27
0
0
关于一个RSA跨语言(java 和py)的加密解密操作

现在有一个需求,java平台提供接口,python平台调用接口,中间用到rsa进行接口的加密解密。java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密...

我亦暖心丶
昨天
0
0
Java加密技术(八)——数字证书

Java加密技术(八)——数字证书 博客分类: Java/Security Javakeystorekeytool数字证书 本篇的主要内容为Java证书体系的实现。 请大家在阅读本篇内容时先阅读 Java加密技术(四),预先了...

脸大的都是胖纸
2015/03/19
0
0
Java加密技术(八)——数字证书

本篇的主要内容为Java证书体系的实现。 请大家在阅读本篇内容时先阅读 Java加密技术(四),预先了解RSA加密算法。 在构建Java代码实现前,我们需要完成证书的制作。 1.生成keyStroe文件 在命...

mrliuze
2015/05/27
0
0
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件

今天来点实际工作中的硬通货! 与计费系统打交道,少不了用到加密/解密实现。为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺。那么需要通过什么载体传递非对称算法公钥/私钥信息...

mrliuze
2015/05/28
0
0
Java开发必须要掌握的加密方式。

第一种类型加密方式:数字摘要(不可逆) 数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。 注:这个串有固定的长度,且不...

java高级架构牛人
06/12
0
0
JAVA 非对称加密算法RSA

非对称加密算法 RSA过程 : 以甲乙双方为例   1、初始化密钥 构建密钥对,生成公钥、私钥保存到keymap中     KeyPairGenerator ---> KeyPair --> RSAPublicKey、RSAPrivateKey   2、甲...

yuanfy008
2015/02/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
3分钟前
1
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
22分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部