AES和RSA加密算法入门Demo

本文主要介绍了AES和RSA两种加密算法,AES作为对称加密标准,而RSA是非对称加密,通常用于公钥和私钥的交换。文中通过Java实现加密解密的Demo,包括客户端和服务端代码,以及加密解密工具类AESUtils和RSAUtils,帮助读者深入理解这两种加密技术。
摘要由CSDN通过智能技术生成

首先感谢博主开园精神,此博客是个人结合博主博文来进行一次个人的总结,加深学习印象。博主已经总结的非常的不错,大家可以参考博主原文博主博客地址
资料参考:
博主源码下载
百度百科


Java中有对称加密和非对称加密。
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥),要么公钥加密私钥加密,要么私钥加密公钥揭秘。

下面来学习AES(对称加密)和RAS(非对称加密)
AES(高级加密标准)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
RAS
之所以叫 RSA算法,是因为算法的三位发明者RSA是目前最有影响力的公钥加密算法
下面提出demo,具体讲解大家参考博主原文。

客户端代码:

package base64;


public class Client {
   
    public static void main(String[] args){

//        rsaTest();
//     aesTest();
        rse_aesTest();
    }
    /**
     *  模拟RSA公钥加密
     *  生成的公钥就是解密需要获取的参数
     */
    private static void rsaTest(){
        try {
            String encryptText=RSAUtils.encryptByPublicKey("Beyond黄家驹");
            System.out.println("公钥:"+encryptText);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    /**
     *  模拟AES加密
     *  解密需要key和encryptText
     */
    private static void aesTest(){
     //明文
     String content="AES加密算法";
     //密钥
     String key=AESUtils.generateKey();
     //密文
     String encryptText=AESUtils.encryptData(key,content);
     System.out.println("key:"+key);
     System.out.println("密钥:"+encryptText);
    }
    /**
     *  RSA和AES结合使用
     */
    private static void rse_aesTest(){
         String text="我是要加密的信息";
         //使用AES对信息加密
        String key=AESUtils.generateKey();
        String encryptText=AESUtils.encryptData(key,text);
        //使用RSA对AES的密钥加密
        try {
            String doubleKey=RSAUtils.encryptByPublicKey(key);
            String doubleencryptText=RSAUtils.encryptByPublicKey(encryptText);
            System.out.println("要传到服务端的密文:"+doubleencryptText);
            System.out.println("要传到服务端的密钥:"+doubleKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

服务端代码:

package base64;


public class Server {
   

    public static void main(String[] args) {
//          rsaTest();
//        aesTest();
        rsa_aesTest();
    }

    /**
     *  解密需要的参数是客户端加密的公钥
     */
    private static void rsaTest() {
        String encryptText = "QclhVvuJJJTd/2KVotzKlTYJEDZh1x1w5KThxyttQZZVGaapyHyEpEprkjHwBlb9xpfHefTIqPscMDXlkuO+yyi09Na0PjLBMl7a8iyVM8MLMedzeU+dgSmAi629u73ZnrOBvs1Oq" +
                "UJswh2P9kqysKSN7MXL2t56KUn93iwY7I0=";
        try {
            String text = RSAUtils.decryptByPrivateKey(encryptText);
            System.out.println("明文:" + text);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void aesTest() {
        /**
         *  每一个key对应一个encryptText,只要key相同那么每一个文本生成的encryptText都是唯一的
         */
        String encryptText = "r2aEHW20cXZ9+NGNklHDwQ==";
        String key="8f9046aac19c45d0";
        try {
            String text = AESUtils.decryptData(key,encryptText);
            System.out.println("明文:" + text);
        } catch (Exception e) {e.printStackTrace();
        }
    }

    private static void rsa_aesTest(){
        //客户端发来的密文
        String doubleEnCryptText="UUAYnThYdXR58mJU9wV9crWf5vmODCDVUF0iu8CmM0Q2etKABgJfnZg1gCqV1bP5kv5IEV33TEgNM3CuoF5Ick+VI02wwJITioAfWK5cB6GB7W8SLvwZCKfRyxa" +
                "cLLKbgUtCB2AZA8BblOqZbkc8E+tY9QpausMePtzOoX4gs3w=";
        //客户端发来的密钥
        String doubleKey="LY8PY7htpWM5W2XtU58sQyE84qur1JVpOJ0zO2++Y5LSj41mrwv9JUA5611kIvXuWTDdkOXukdk1b8fbZWfmwdmlCEAOvAJ2lmo7Hwb7rfEILSzXkXnHxlxWuCkXsgZOqnK2eGVs" +
                "vFTEPqzci77vHCMyTXoGLFTPNV09AyqQgyo=";
        try {
            //RSA解密
            String key=RSAUtils.decryptByPrivateKey(doubleKey);
            String encrtptText=RSAUtils.decryptByPrivateKey(doubleEnCryptText);
            //AES解密
            String text=AESUtils.decryptData(key,encrtptText);
            //解密完成的明文
            System.out.println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值