关于用户注册以及登录验证操作的一个猜想

写在前面

之前做的系统中,涉及到用户注册以及登录合法性验证,都是通过Java和数据库结合,数据库仅负责存储和提供查询结果,所有的加密和判断都是通过Java进行。
但是,既然某些数据库系统本身提供了一些运算和处理函数,那么,可以使用这些内置的函数进行注册以及登录验证操作吗?


使用Java和数据库的结合

注册:

当获取到用户名之后,首先通过Java的加密方法,比如MD5进行加密,然后将用户名和加密之后的密码存储到数据库当中。

登录验证:

用户登录时,首先拿到的是用户名以及密码的明码。
通过用户名从数据库中获取到加密的密码。select password from t_login where username = '用户名'
将密码使用Java的MD5加密方式进行加密。
将加密之后的字符串与从数据库查询得到的密码进行比较。

仅仅使用数据库完成注册和登录验证

MySQL数据库提供dm5(str)函数,可以对字符串进行MD5加密,strsmp(str1,str2)函数可以对两个字符串进行比较,如果字符串内容相同,其结果为0
有了这两个函数,就可以将Java的加密和比较功能替换掉。具体的数据库操作如下:

mysql> create database thetest;
Query OK, 1 row affected (0.05 sec)

mysql> use thetest;
Database changed
mysql> create table loginlist(
    -> username char(3) primary key,
    -> password char(32));
Query OK, 0 rows affected (0.06 sec)

mysql> show create table loginlist \G
*************************** 1. row ***************************
       Table: loginlist
Create Table: CREATE TABLE `loginlist` (
  `username` char(3) NOT NULL,
  `password` char(32) DEFAULT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.03 sec)

mysql> # 将密码使用MD5加密并存储
mysql> insert into loginlist(username,password) values('001',md5('78954'));
Query OK, 1 row affected (0.05 sec)

mysql> select username,password as md5str from loginlist;
+----------+----------------------------------+
| username | md5str                           |
+----------+----------------------------------+
| 001      | c72acf0f229a870418f4ae988daef7aa |
+----------+----------------------------------+
1 row in set (0.03 sec)

mysql> # 模拟登录验证,用户名和密码是直接从前台表单接收的字符串
mysql> select strcmp((select password from loginlist where username = '001'),md5('78954')) as 比较结果;
+--------------+
| 比较结果      |
+--------------+
|            0 |
+--------------+
1 row in set (0.03 sec)

mysql> # 如果输入的用户名不存在
mysql> select strcmp((select password from loginlist where username = '005'),md5('78954')) as 比较结果;
+--------------+
| 比较结果      |
+--------------+
|         NULL |
+--------------+
1 row in set (0.03 sec)

mysql> exit
Bye

C:\Windows\system32>

结语

关于仅仅使用数据库的内置函数进行操作,纯粹属于学习者的自我猜想,在性能和安全性方面还没有进行充分验证,在实际项目中还是要谨慎使用。也希望各位朋友能够帮助完善。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值