超简便的RSA算法密钥加密解密

今天项目里需要用到一个关于密钥加密解密的功能,然后去百度了,看大佬们怎么说的,好多种方式,md5了,RSA了等等等.......,看了半天,还是感觉RSA比较简单点,我copy了一个代码量多的,拿到本地,打断点慢慢研究,大概调试了20分钟吧,算是吃透了,然后发现代码大量冗余,或许帖子本人也是copy的,我把代码删除了好多,做到了用最少的代码把事情做好,接下来上代码

1.导入依赖:这个必须有的

<dependency>

      <groupId>commons-codec</groupId>

      <artifactId>commons-codec</artifactId>

       <version>1.10</version>

</dependency>

2.先提供密钥生成方法:生成的是个map  point是生成密钥的铭文,可以自己设置 String类型

/**
     * 随机生成密钥对
     * @author LinAndQian
     * @throws NoSuchAlgorithmException
     * @param point
     */
    public static Map<String, String> genKeyPair(String point) throws NoSuchAlgorithmException {
        log.info("{}|开始生成公私钥",point);
        // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        // 初始化密钥对生成器,密钥大小为96-1024位
        keyPairGen.initialize(1024, new SecureRandom());
        // 生成一个密钥对,保存在keyPair中
        KeyPair keyPair = keyPairGen.generateKeyPair();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   // 得到私钥
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  // 得到公钥
        String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
        // 得到私钥字符串
        String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
        // 将公钥和私钥保存到Map
        Map<String, String> map = new HashMap<>();
        map.put("publicKey", publicKeyString);
        map.put("privateKey", privateKeyString);
        log.info("{}|生成的公私钥|map:{}",point,map);
        return map;
    }

3.定义密码,然后给公钥加密

//定义密码
String password = "我是大好人";
//公钥加密
            //base64编码的公钥
            byte[] publicKeyArrs = Base64.decodeBase64(publicKey);
       
            //加密方式是RSA,所以要转化成RSA类型
            RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyArrs));
​
            //选择加密方式
            Cipher cipher = Cipher.getInstance("RSA");
     
            //初始化密码
            cipher.init(Cipher.ENCRYPT_MODE, pubKey);
 
            //正是加密
            String publicKeyEn = Base64.encodeBase64String(cipher.doFinal(password.getBytes("UTF-8")));
​          
            //输出加密后的公钥
            System.out.println("加密后的公钥:"+publicKeyEn);

4.私钥给公钥解密,拿到密码:注意必须是同一对公私钥才行

//私钥破公钥密码
        //1.先把加密的公钥转化成  base64编码
        byte[] publicKeyEnArrs = Base64.decodeBase64(publicKeyEn.getBytes("UTF-8"));
​
        //2.把未加密的私钥转化成  base64编码
        byte[] privateKeyArrs = Base64.decodeBase64(privateKey.getBytes("UTF-8"));
​
        //3.把私钥转化为RSA类型的密钥类
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyArrs));
​
        //4.RSA方式解密
        Cipher cipher = Cipher.getInstance("RSA");
​
        //5.初始化密码
        cipher.init(Cipher.DECRYPT_MODE, priKey);
​
        //6.解密:拿到密码
        String password = new String(cipher.doFinal(publicKeyEnArrs));
​
        //7.输出密码
        System.out.println("密码是:"+password); // password = "我是大好人"

上面代码就ok了,是不是简单多了,兄弟们,关注林哥我不迷路

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值