文档章节

java 私钥加密解密的例子

zplswf
 zplswf
发布于 2013/12/25 21:39
字数 631
阅读 318
收藏 1
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
码字总数 5609
作品 0
郑州
高级程序员
使用Hutool处理RSA等非对称加密

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

路小磊
2017/08/24
0
22
浅析RSA公钥密码以及使用Java自带API实现RSA的密钥生成和加解密

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

Lunqi
2015/07/15
0
1
Java加密技术(七)——非对称加密算法最高级ECC

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

脸大的都是胖纸
2015/03/19
0
0
Android外部文件加解密及应用实践

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

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

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

mrliuze
2015/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

控件WebView显示网页

一、代码编写 (一)方法一:通过打开app直接打开指定网站 1.打开Android Stutio,新建一个工程,名为Sdca。注意,名称开头必须为大写。 2.添加WebView控件 打开app esactivity_main.xml添加...

lanyu96
26分钟前
2
0
WinRAR 去除弹窗广告

想要去除它,需要用到另外一个工具resource hacker,百度一下,下载它,工具很小,安装也简单。安装过后,找到winrar安装目录下的WinRAR.exe文件,右击选择 open useing resource hacker打开...

YunOu
39分钟前
2
0
Bash工作管理详解

Bash工作管理 Bash的工作是对具体任务的一个抽象表述,更确切的说是对管道的应用上的表述。Bash中的工作在形式上表现为一组相关进程或单个进程。工作进程组分为前台和后台,前台进程会对键盘...

小陶小陶
43分钟前
2
0
Qt那些事0.0.1

LIBS += -L$$PWD/lib/ -lStv1QMAKE_POST_LINK += $$QMAKE_COPY $$replace(PWD,"/","\\")\lib\Stv1.dll $$replace(OUT_PWD,"/","\\")\debug\Stv1.dll pro文件里,写起来按理说应该是轻松地......

Ev4n
52分钟前
2
0
如何正确的使用动态VPS(Linux)自动更换IP

背景 现在越来越多的人开始玩网赚项目,蚂蚁再小也是肉,薅羊毛的羊毛党越来越多,一些网赚项目也越来越受欢迎,但是一般的网赚项目都是要求真实用户的,所以要想获得大量的真实ip,一种动态...

bengozhong
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部