rsa 生成公私钥

本文提供了一段Java代码,用于生成RSA公钥和私钥,并进行加密解密操作。通过KeyPairGenerator实例化RSA算法,设置密钥长度,然后生成KeyPair。将生成的公钥和私钥编码并写入文件,从文件中读取并解码以进行加密和解密。此代码可用于实现基于RSA的安全通信。
摘要由CSDN通过智能技术生成

两个类解决.代码如下:直接copy

package util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

/**
 * RSA使用X509EncodedKeySpec、PKCS8EncodedKeySpec生成公钥和私钥
 * 加密数据大小不能超过127 bytes
 * @Description:加签、验签、加密、解密、生成公钥、私钥
 * @date:2018年2月24日
 */
public class RSAUtil
{
    public static void main(String[] args) throws Exception
    {
        //生成公私钥文件
//        RSAUtil.getKeyPair("/home/herman/tttttttt");
        String publicKey = RSAUtil.readKeyFromFile("/home/herman/tttttttt/publicKey.keystore");
        String privateKey = RSAUtil.readKeyFromFile("/home/herman/tttttttt/privateKey.keystore");
        String cipherText = RSAUtil.encryptByPublicKey("herman", RSAUtil.readPublicKeyFromString(publicKey));
        System.out.println("加密之后是:"+cipherText);
        String plainText = RSAUtil.decryptByPrivateKey(cipherText, RSAUtil.readPrivateKeyFromString(privateKey));
        System.out.println("解密之后:"+plainText);
    }
    /**
     * 生成公私钥对
     * @param filePath 生成文件路径
     */
    @SuppressWarnings("static-access")
    public static void getKeyPair(String filePath)
    {
        KeyPairGenerator keyPairGenerator = null;
        try
        {
            keyPairGenerator = keyPairGenerator.getInstance("RSA");
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        keyPairGenerator.initialize(1024, new SecureRandom());
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

        String publicKeyString = Base64.encode(publicKey.getEncoded());
        String privateKeyString = Base64.encode(privateKey.getEncoded());
        try
        {
            BufferedWriter publicbw = new BufferedWriter(new FileWriter(new File(filePath+"/publicKey.keystore")));
            BufferedWriter privatebw = new BufferedWriter(new FileWriter(new File(filePath+"/privateKey.keystore")));
            publicbw.write(publicKeyString);
            privatebw.write(privateKeyString);
            publicbw.flush();
            publicbw.close();
            privatebw.flush();
            privatebw.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }

    /**
     * 从文件中读取公钥或私钥
     * @param filePath 文件路径
     * @return 公钥或私钥
     */
    public static String readKeyFromFile(String filePath)
    {
        try
        {
            BufferedReader br = new BufferedReader(new FileReader(new File(filePath)));
            String readLine = null;
            StringBuilder sb = new StringBuilder();
            while((readLine = br.readLine()) != null)
            {
                sb.append(readLine);
            }
            br.close();
            return sb.toString();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 从字符串中加载公钥
     * @return 公钥
     */
    public static RSAPublicKey readPublicKeyFromString(String publicKeyStr)
    {
        try
        {
            byte[] bt = Base64.decode(publi

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值