JAVA使用mysql加密解密函数(AES_ENCRYPT/AES_DECRYPT)

前言

  最近大学做JavaWeb课设时发现,很多同学的有关于账号密码都是明文储存在mysql数据库中,其实这样做在实际应用中是非常不安全的,其实mysql最近本身就提供了非常好的两个函数来供我们去加密解密我们要存入的数据,下面我们就来介绍一下如何在java中使用加密解密函数去存储一下铭感的数据。


提示:以下是本篇文章正文内容,下面案例可供参考

正文

我们就举一个最常见的使用JavaWeb来实现注册登录功能的例子,很多同学在存账号密码到mysql中时就像如下代码所示直接将用户注册时输入的密码直接明文存入到了mysql数据库中。

 public void DepositUser(String name,String password)
 {
     Connection con=getConn();
        try
        {
            //存入账号密码
            Statement st=con.createStatement();
            st.executeUpdate("INSERT INTO `user` (`user_name`, `user_password`) 
            VALUES ('"+name+"','"+password+"');");

        }
        catch (Exception e){e.printStackTrace();}
 }

其实这样时非常不安全的,我们可以使用MYSQL提供的AES_ENCRYPT和AES_AES_DECRYPT这两个函数对数据进行加密存入 。

下面我对这两个函数的用法进行简单的介绍,并通过上面的例子来演示一下

AES_ENCRYPT函数就是加密函数,encrypt的英文意思就是加密,很好记忆

其加密原理可以看下面博主得到描述的十分详细

AES加密算法原理_张维鹏的博客-CSDN博客_aes加密算法原理

其使用步骤如下:

1、先将我们要将存入加密的数据在数据库中的类型改为vinbinary,实体类的类型还是可以用String类型就行了。

JAVA使用mysql加密解密函数(AES_ENCRYPT/AES_DECRYPT)_第1张图片

2、我们在java中向数据库中插入数据时使用加密函数加密。

 其用法非常简单,加密函数AES_ENCRYPT用有两个参数,前面的一个参数代表我们要加密的数据,后面一个参数我们可以理解为一个key,我们加密和解密的数据只能通过这个key去匹配是否是同一个数据,若加密设置key为‘Akey’,我们去解密这个数据时将key写为‘Bkey’,那么就不能解密这个数据了。

加密后的数据我们在mysql数据库中查看如下所示:

JAVA使用mysql加密解密函数(AES_ENCRYPT/AES_DECRYPT)_第2张图片

 这样就加密完成了

3、若需要我们解密已经存入的数据,我们就可以使用AES_DECRYPT函数来进行解密

我们通过下面的代码演示其解密效果:

 @Test
 public void test() throws ClassNotFoundException, SQLException
 {
        //连接mysql数据库
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = 
        DriverManager.getConnection("jdbc:mysql://localhost:3306/chx? 
        serverTimezone=UTC","root","a2002621731");
        Statement st=connection.createStatement();
        //解密数据
        ResultSet rs=st.executeQuery("select AES_DECRYPT(password,'key')
        from chx.tb_user where id='222'");
        //测试解密效果
        while (rs.next())
        {
            System.out.println(rs.getString(1));
        }

    }

解密函数AES_DECRYPT的参数也有两个,其意义和解密函数AES_ENCRYPT类似。 

运行上面测试代码,

JAVA使用mysql加密解密函数(AES_ENCRYPT/AES_DECRYPT)_第3张图片

我们可以发现已经解密成功了。

同时在打印台我们发现有一串null,这是因为我们这个解密函数是根据这个key来解密的,如果我们加密的时候设置的key和解密的时候的key不一样,那么函数就不会去根据AES规则去解密数据,所以那个null就是因为我之前存储的数据没有设置key或设置的key不同,所以查询的数据变为null了 

 


总结

以上就是今天介绍的内容,简单描述了mysql提供的加密解密函数在java中的应用,希望对你有帮助。

 

你可能感兴趣的:(java,java-ee,数据库,mysql)