RSA加密算法的实现

本文档介绍了一个用于银行数据安全的简易RSA加密算法工具类的实现,包括生成公私钥对、公钥私钥字符串化、加解密算法以及测试案例。通过KeyPairGenerator生成公私钥,使用Cipher进行加解密,确保前后端数据传输安全。

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


前言

由于在银行方面工作对数据安全性要求比较高,需要对前后端通信的数据进行加密,因此编写一个简易的RSA加密算法工具类,可以提高前后端传送数据时的安全性。再次罗列下来,希望自己能有一个更好的理解以及帮助到有需要的小伙伴!有问题的小伙伴可以底部留言,我抽空都会帮忙解答一下,一起加油,共同进步!

一、第一步使用generatorKeyPair产生公私钥

首先创建generatorKeyPair对象(传入要加密的算法)并初始化(传入加密位数),使用其产生keyPair,接着从其其中取出公私钥,最后放到map中进行打包返回。
 /**
     * 通过KeyPairGenerator产生公私钥
     * @return
     * @throws NoSuchAlgorithmException
     */
    public static Map<String ,Object> generetorKeyPair() throws NoSuchAlgorithmException {
   

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);

        keyPairGenerator.initialize(INITIALIZE_LENGTH);

        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();

        RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

        HashMap<String, Object> map = new HashMap<>();

        map.put("RSAPublicKey",rsaPublicKey);

        map.put("RSAPrivateKey",rsaPrivateKey);

        return map;


    }


二、取出公私钥字符串

手动创建两个方法,分别对公私钥进行base64加密字符串(此处采用 java.util.Base64或者commons.codec下的Base64都是可以的),有效提高公私钥的安全性。

/**
     * 拿到RSA公钥字符串
     * @param map
     * @return
     */
    public static String getRSAPublicKey(Map<String ,Object> map) {
   

        Key rsaPublicKey = (Key) map.get(PUBLIC_KEY);

        return Base64.getEncoder().encodeToString(rsaPublicKey.getEncoded());


    }

    /**
     *拿到RSA私钥字符串
     * @param map
     * @return
     */
    public static String getRSAPriateKey(Map<String ,Object> map) {
   


        Key rsaPrivateKey = (Key) map.get(PRIVATE_KEY);

        return Base64.getEncoder().encodeToString(rsaPrivateKey.getEncoded());

    }



三、加解密算法

通过Cipher加解密类实现RSA的加密解密,加密和解密的过程类似,是一个可逆的过程。加密公钥采用的是X509EncodedKeySpec 产生一个实例作为参数传入KeyFactory中产生一个公钥。后面直接把公钥以及数据作为参数传入Cipher中即可实现加密。这里如果需要加密的数据长度较小可以采用一次加密。否则可以采用分段加密,代码中有详细解释,这里不多做阐述。解密的过程类似,但采用PKCS8EncodedKeySpec 产生实例,并把其传入KeyFactory中产生私钥,下面解密与加密类似可以一次性解密就直接解密,否则就分段解密。


 /**
     * 使用公钥进行加密
     * @param data
     * @param publicKey
     * @return
     * @throws Exception
     */
    public static byte[] encryptByPublic( byte[] data,String publicKey ) throws Exception {
   

        byte[] decode = Base64.getDecoder().decode(publicKey);

        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(decode);

        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PublicKey publicK = keyFactory.generatePublic(x509EncodedKeySpec);

        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

疯子B哥

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值