文档章节

java 私钥加密解密的例子

zplswf
 zplswf
发布于 2013/12/25 21:39
字数 631
阅读 371
收藏 2
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
粉丝 56
博文 44
码字总数 5609
作品 0
郑州
高级程序员
私信 提问
使用Hutool处理RSA等非对称加密

介绍 Hutool工具是一个国产开源Java工具集,旨在简化Java开发中繁琐的过程,Hutool-crypto模块便是针对JDK加密解密做了大大简化。 此文主要介绍利用Hutool-crypto简化非对称加密解密。 对于非...

路小磊
2017/08/24
0
22
私钥加密公钥解密或者公钥加密私钥解密有意义吗?

最近对java的算法的进行了梳理,看了一本梁栋编写的java加密与解密的艺术,对此有个疑问。就是对RSA算法来说,公钥和私钥都可以用来加密。 1、如果是私钥加密,公钥解密的话,因为公钥是公开...

开源中国总书记
2018/03/01
3.6K
12
RSA算法 c++/java相互进行加密解密出现“解密失败”

场景:Java生成的RSA公钥传给C++,C++用该RSA公钥加密32位随机数,返回密文给Java,Java用RSA私钥解密,出现“解密失败”。 公钥模: 8B1960C2B5309F109AD28E80150A0F6F80FFE266891BB1B9B86A...

知行旅人
2017/05/09
968
3
浅析RSA公钥密码以及使用Java自带API实现RSA的密钥生成和加解密

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

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

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

C6C
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

都996了,研发效能还是提不起来,关键在这里

研发效能的提升必须落实为团队需求、协作和工程技术等实践。接下来的几篇文章,我将结合不同BU的案例,介绍研发效能提升的具体实践。 本篇将从团队协作的实践开始,通过可视化端到端的价值流...

阿里云官方博客
36分钟前
3
0
CentOS开机自启SVN

安装好 svn 服务后,默认是没有随系统启动自动启动的, CentOS 7 的 /etc/rc.d/rc.local 是没有执行权限的, 系统建议创建 systemd service 启动服务 于是查看 systemd 里 svn 的配置文件 /l...

临江仙卜算子
38分钟前
1
0
redo和undo区别讨论

英文解释: 名词:两种流程,redo重做流程,undo撤销还原流程;或则是redo日志与undo段的简称 动词:redo即重做,undo即撤销还原。 翻译有时候为了简单,常把动词和名称混用。不同场景不同的...

突突突酱
50分钟前
1
0
shell实例100例《二》

11、题目要求 写一个脚本实现如下功能: 输入一个数字,然后运行对应的一个命令。 显示命令如下: cmd meau* 1 - date 2 - ls 3 - who 4 - pwd 当输入1时,会运行date, 输入2时运行ls, 以此类...

寰宇01
51分钟前
1
0
Angular在页面加载很慢的时候,会出现双花括号的问题

我们知道在应用的页面或者组件需要加载数据时,浏览器和angular渲染页面都需要消耗一定的时间。这里的间隔可能很小,甚至让人感觉不到区别;但也可能很长,这样会导致让我们的用户看到了没有...

孟飞阳
52分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部