基于java类库的RSA加密算法实现

本文介绍了如何使用Java内置类库实现RSA加密算法,重点展示了核心的加密和解密代码,帮助开发者理解并应用该算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心代码也是基于java类库实现的

加密部分的核心代码
Cipher cipher = Cipher.getInstance(RSA); 
cipher.init(Cipher.ENCRYPT_MODE, pubRSA);
return cipher.doFinal(text.getBytes());

解密部分的核心代码
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.DECRYPT_MODE, rk);
return cipher.doFinal(src);

完整代码

package RSA;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import javax.crypto.Cipher;

public class RSACrypto { 
    private final static String RSA = "RSA";
    public static PublicKey uk;
    public static PrivateKey rk;

    public static void generateKey() throws Exception{

        KeyPairGenerator gen = KeyPairGenerator.getInstance(RSA); 
        gen.initialize(512, new SecureRandom()); 
        KeyPair keyPair = gen.generateKeyPair(); 
        uk = keyPair.getPublic();
        rk = keyPair.getPrivate();
    }
    private static byte[] encrypt(String text, PublicKey pubRSA) throws Exception{

        Cipher cipher = Cipher.getInstance(RSA); 
        cipher.init(Cipher.ENCRYPT_MODE, pubRSA);
        return cipher.doFinal(text.getBytes());
    }
    public final static String encrypt(String text){

        try {
            return byte2hex(encrypt(text, uk));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    public final static String decrypt(String data){

        try{
            return new String(decrypt(hex2byte(data.getBytes())));
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    private static byte[] decrypt(byte[] src) throws Exception{

        Cipher cipher = Cipher.getInstance(RSA);
        cipher.init(Cipher.DECRYPT_MODE, rk);
        return cipher.doFinal(src);
    } 

    public static String byte2hex(byte[] b){

        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n ++)
        {
            stmp = Integer.toHexString(b[n] & 0xFF);
            if (stmp.length() == 1)
                hs += ("0" + stmp);
            else
                hs += stmp;
        }
        return hs.toUpperCase();
    }

    public static byte[] hex2byte(byte[] b){

        if ((b.length % 2) != 0)
            throw new IllegalArgumentException("长度不是偶数");

        byte[] b2 = new byte[b.length / 2];

        for (int n = 0; n < b.length; n += 2)
        {
            String item = new String(b, n, 2);
            b2[n/2] = (byte)Integer.parseInt(item, 16);
        }
        return b2;
    }

    //just for test
    public static void main(String args[]){

        try{
            RSACrypto.generateKey();
            String cipherText = RSACrypto.encrypt("cryptology");
            System.out.println("密文是:"+cipherText);
            String plainText = RSACrypto.decrypt(cipherText);
            System.out.println("明文是:"+plainText);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七层楼BB

请我喝杯咖啡吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值