Java的RSA加解密算法通过公私钥的模,指数实现

public class RSA {

    public static void main(String[] args) throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(1024);
        KeyPair keyPair = generator.generateKeyPair();

        RSAPrivateCrtKey privateCrtKey = (RSAPrivateCrtKey) keyPair.getPrivate();
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

        System.out.println("私钥模:"+privateCrtKey.getModulus());
        System.out.println("私钥指数:"+privateCrtKey.getPrivateExponent());
        System.out.println("公钥模: "+publicKey.getModulus());
        System.out.println("公钥指数:"+publicKey.getPublicExponent());

        String str = "1232131";
        String en = Encrypt(publicKey.getModulus(),publicKey.getPublicExponent(),str);
        System.out.println(en);
        String de = Decrypt(privateCrtKey.getModulus(),privateCrtKey.getPrivateExponent(),en);
        System.out.println(de);
    }

    //加密
    public static String Encrypt(BigInteger publicModules,BigInteger publicExponent,String str) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(publicModules,publicExponent);
        PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE,publicKey);
        byte[] encryptData = cipher.doFinal(str.getBytes());
        return Base64.getEncoder().encodeToString(encryptData);  //base64加密
    }

    //解密
    public static String Decrypt(BigInteger privateModules,BigInteger privateExponent,String str) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(privateModules,privateExponent);
        PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE,privateKey);
        byte[] encryptData = Base64.getDecoder().decode(str);   //base64解密
        byte[] decryptData = cipher.doFinal(encryptData);
        return new String(decryptData);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值