RSA加密算法

1. 加密技术的类型

加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法,加密算法可以分为三类:

  • 对称加密,如AES
    • 基本原理:将明文分成N个组,然后使用密钥对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文。
    • 优势:算法公开、计算量小、加密速度快、加密效率高
    • 缺陷:双方都使用同样密钥,安全性得不到保证
  • 非对称加密,如RSA
    • 基本原理:同时生成两把密钥:私钥和公钥,私钥隐秘保存公钥可以下发给信任客户端
      • 私钥加密,持有公钥可以解密
      • 公钥加密,持有私钥可以解密
      • 私钥加密,私钥无法解密,只能是公钥解密
      • 公钥加密,公钥无法解密,只能是私钥解密
    • 优点:安全,难以破解
    • 缺点:算法比较耗时
  • 不可逆加密,如MD5,SHA
    • 基本原理:加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,无法根据密文推算出明文。

2. RSA加密

 测试代码:

package com.tanhua.sso;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.junit.Assert;
import org.junit.Test;

public class TestRSA {

    @Test
    public void testRSA() {
        RSA rsa = new RSA();

        // //获得私钥
        // rsa.getPrivateKey()
        System.out.println("私钥: " + rsa.getPrivateKeyBase64());
        // //获得公钥
        // rsa.getPublicKey()
        System.out.println("公钥: " + rsa.getPublicKeyBase64());

        //公钥加密,私钥解密
        byte[] encrypt = rsa.encrypt(StrUtil.bytes("测试代码", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
        byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey);

        Assert.assertEquals("测试代码", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));

        //私钥加密,公钥解密
        byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("测试代码", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey);
        byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey);
        Assert.assertEquals("测试代码", StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8));

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值