Java简易登录注册功能实现代码解析

哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
哈希算法最重要的特点就是:

  • 相同的输入一定得到相同的输出;
  • 不同的输入大概率得到不同的输出。
  • 哈希算法的目的就是为了验证原始数据是否被篡改。

我们来简单实现一个用于用户注册和登录最基本的功能。

在登录中,要检查是否存在某个用户信息,每个用户信息都是唯一的,所以可以借助Set的特性来操作用户信息的存放。

在注册中,要检查用户名是否已经被注册,而每个用户名也是唯一的,所以在这里也利用Set来操作用户名的存放。

当然,也可以用Map来存放用户名和用户密码,K存放用户名,对应的V存放密码。但是为了让用户名和密码的关联度尽可能的小一些,所以利用两个Set来分别存放用户名和用户信息。

由于Set是无序的,所以当黑客获取到这两个数据文件的时候也很难将用户名对应到相应的用户信息。

这里的用户信息指的是将用户名和密码混合后的信息,例如某个用户的信息是"admin",密码是"password",那么可以将这两个字段混合来达到增长信息量的目的。

当然,为了让安全性更高,可以利用特定的排列组合将两个字符串混合,比如可以将两个字符串拆解成字符数组,按照数组下标的奇偶数来排列两个字符串。

例如"admin"的长度小于"password",因此以"admin"为基准,'a'为起始,"admin"占奇数位,"passw"占偶数位,剩余字符连接在生成字段后,即"apdamsisnword",就像把用户名插入到了密码中。

还有一种方法是对每个生成的用户信息添加随机字符,这个方法被称为“加盐”。

例如,用户名和密码依然是"admin"和"password",我们设置一个随机salt = "aRandomSalt",然后将这个salt加入到用户名和密码之中,比如"admin" + salt + "password",salt + "admin" + "password"或是其他更复杂的组合。

后续的代码中,简单的将用户名和密码连接在了一起,即"adminpassword"

package service;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashSet;
import java.util.Set;

import dao.Dao; // 储存相关配置文件
import dao.UserInfoDao; // 用于将用户信息存盘
import entity.UserInfo; // 用户信息实体类,其中的两个类成员是userName和userPassword,即用户名和密码

public class UserInfoService extends Dao {
	private String userInfoPath; // 用户信息保存的文件路径
	private String userNamePath; // 用户名保存的文件路径
	private UserInfoDao dao = new UserInfoDao();

	public UserInfoService() {
		super();
		userInfoPath = super.getResource().getString("userInfo");
		userNamePath = super.getResource().getString("userName");
	}

	/**
	 * 用户登录。若用户信息存在,则登录成功;若用户信息不存在,则登录失败
	 *
	 * @param userInfo
	 * @return 提示信息
	 */
	public String userSignIn(UserInfo userInfo) {
		Set<String> userInfoSet = null;
		String tips;
		userInfoSet = dao.readInfo(userInfoPath); // 从相关文件中读取用户信息
		if (userInfoSet == null) { // 若尚无用户注册,则new HashSet<String>(),避免NullPointerException
			userInfoSet = new HashSet<String>();
		}
		if (userInfoSet.contains(getUserInfoHashCode(userInfo))) { // 判断是否含有相关用户信息
			tips = "登录成功!";
		} else {
			tips = "登录失败!请检查用户名或密码";
		}
		return tips;
	}

	/**
	 * 用户注册。若用户名不存在,则注册成功;若用户名存在,则注册失败
	 *
	 * @param userInfo
	 * @return 提示信息
	 */
	public String userSignUp(UserInfo userInfo) {
		Set<String> userInfoSet = null;
		Set<String> userNameSet = null;
		String tips;
		userInfoSet = dao.readInfo(userInfoPath); // 从相关文件中读取用户信息
		userNameSet = dao.readInfo(userNamePath); // 从相关文件中读取用户名
		if (userInfoSet == null) { // 若尚无用户注册,则new HashSet<String>(),避免NullPointerException
			userInfoSet = new HashSet<String>();
		}
		if (userNameSet == null) { // 若尚无用户注册,则new HashSet<String>(),避免NullPointerException
			userNameSet = new HashSet<String>();
		}
		if (userNameSet.add(userInfo.getUserName())) { // 判断用户名是否已注册
			userInfoSet.add(getUserInfoHashCode(userInfo)); // 若用户名未注册,则将用户信息添加至Set中
			dao.saveInfo(userInfoSet, userInfoPath); // 保存用户信息到相关文件
			dao.saveInfo(userNameSet, userNamePath); // 保存用户名到相关文件
			tips = "注册成功!";
		} else {
			tips = "注册失败!用户已存在";
		}
		return tips;
	}

	/**
	 * 以预设算法SHA-1加密用户名和密码,以预设基数36位保存
	 *
	 * @param userInfo
	 * @return 加密后的用户信息
	 */
	public String getUserInfoHashCode(UserInfo userInfo) {
		return getUserInfoHashCode(userInfo, "SHA-1", 36); // 用SHA-1算法生成用户信息密钥,进制为36进制
	}

	/**
	 * 以指定算法algorithm加密用户名和密码,以指定基数radix长度保存
	 *
	 * @param userInfo
	 * @param algorithm
	 * @param radix
	 * @return 加密后的用户信息
	 */
	public String getUserInfoHashCode(UserInfo userInfo, String algorithm, int radix) {
		try {
			MessageDigest md = MessageDigest.getInstance(algorithm); // 用指定算法algorithm创建一个MessageDigest实例
			md.update((userInfo.getUserName() + userInfo.getUserPassword()).getBytes("UTF-8")); // 将用户名和密码合并,调用update()输入数据
			byte[] res = md.digest(); // 将摘要存放在byte[]中
			return new BigInteger(1, res).toString(radix); // 返回一个指定进制基数为radix的字符串
		} catch (Exception e) {
			e.printStackTrace();
			return ""; // 若异常则返回空字符串
		}
	}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java+mysql用户注册登录功能

    最近刚刚开始学习mysql,所以就写了这个很基本的用户注册登录的功能来练练手.虽然这个很简单,但是我还是看到了自己学习的进步,很开心.哈哈哈. 这里要注意数据表的建立: 直接上代码吧,里面注释很详细了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以实现用户的注册和登录 */ private static String username;//用户登录注册的姓名 privat

  • JavaWeb简单用户登录注册实例代码(有验证码)

    需求 编写login登录界面(用户名,密码,验证码,登陆按钮,注册按钮) 设计关系数据库(编号,用户名,密码) 编写注册功能,将数据存储在数据库中.(姓名不能重复,设为主键,重复会注册失败) 编写登录功能 .首先获取验证码,先判断验证码是否正确,不正确则显示验证码错误.验证码正确后再获取用户名和密码,进行数据库的搜索比对,若正确则重定向到成功的界面,并且将用户名显示. jar包 技术选型 Servlet + JSP + Mysql + JDBCTemplate + Druid + BeanUti

  • Java简易登录注册小程序

    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. 功能介绍:简单的登录注册系统,使用了数据库sqlserver.单例模式.正则表达式以及图形化开发等知识. 1.在登录界面,可以登录或者注册用户. 注册用户界面,按照正则表达式规定的格式要求来输入信息,若有误,则重新输入. 2.点击注册,首先连接SQLserver数据库,连接成功则会判断该用户名是否已经存在,若存在,则给出提示.反之则进行注册. 3.登录界面,点击登录按钮时,首先与数据库

  • 基于IO版的用户登录注册实例(Java)

    今天学的是用户登录注册功能. 4个包: itcast.cn.user包 User.java 用户类,描述用户基本信息,包括成员变量,无参构造函数,带参构造(可有可无).get和set方法 package itcast.cn.day22; /* * 用户基本描述包类 */ public class User { private int userName; private int passWord; public User(){ super(); } public User(int userName

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

  • Servlet+JavaBean+JSP打造Java Web注册与登录功能

    采用Java Web所实现的MVC结构图如下,其中控制器部分采用Servlet来实现,模型部分采用JavaBean来实现,而大部分的视图采用Jsp页面来实现. 思想基础 JSP+JavaBean两层结构工作原理应该是比较熟悉的,也比较好理解. 但是有一点必须要清楚就是用户通过浏览器来发送网页的请求,此请求到达服务器后在服务器端查找对应的网页,如果是首次请求(第二次就不用解释执行了),对于JSP来说要生成Servlet,然后通过Servlet引擎来执行 Servlet,把调用JavaBean的结果

  • JAVA简单实现MD5注册登录加密实例代码

    开发环境:jdk1.7,eclipse 框架:springmvc,mybatis 工具:maven 以下代码复制即可实现MD5加密 创建一个mave项目,加web.不懂得可以搜索一下就有了. 注册用户的JSP页面代码如下. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PU

  • Java简易登录注册功能实现代码解析

    哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要. 哈希算法最重要的特点就是: 相同的输入一定得到相同的输出: 不同的输入大概率得到不同的输出. 哈希算法的目的就是为了验证原始数据是否被篡改. 我们来简单实现一个用于用户注册和登录最基本的功能. 在登录中,要检查是否存在某个用户信息,每个用户信息都是唯一的,所以可以借助Set的特性来操作用户信息的存放. 在注册中,要检查用户名是否已经被注册,而每个用户名也是唯一的,所以在这里也利

  • 使用JSP实现简单的用户登录注册页面示例代码解析

    实验要求: 将实验2中的系统用户登录和注册页面改为JSP页面,并部署自己的Web应用于Tomcat服务器中 具体要求: 完成登录JSP页面设计和注册页面设计 在登录页面表单中使用request对象获取用户信息,建立新的JSP页面完成登录验证(用户名和密码自己指定即可). 验证结果显示(如登录成功/用户名密码错误,可以使用JavaScript,也可以使用新的JSP页面). 在注册页面表单中使用request对象获取用户注册信息(注册项目由自己指定),在新的JSP页面显示用户注册信息,并提示注册成功

  • 基于Java实现QQ登录注册功能的示例代码

    目录 前言 实现代码 登录页面 注册页面 效果展示 前言 本文主要应用的技术有:GUI.JDBC.多线程 实现的功能具体如下: 1.登录功能 2.注册功能 3.是否隐藏密码的选择以及实现功能 4.选择性别功能 5.密码与确认密码功能 6.登录页面实时展示当前的时间 7.当登录时用户名与密码在数据库中没有相匹配的数据,则会跳转到注册页面上去. 8.同样,注册完毕后,数据会运用JDBC将数据写入数据库中,然后跳转回登录页面. 实现代码 登录页面 import javax.swing.*; impor

  • koa2实现登录注册功能的示例代码

    本文介绍了koa2实现登录注册功能的示例代码,分享给大家,具体如下: 这个主要结合前几天的内容,做个实际案例的效果 版本: 项目结构: 前几天,我们把注册和登录的页面demo实现了,今天我们主要实现这么几个内容 注册新用户 判断该邮箱是否注册过 登录判断是否注册过 登录时的密码的正确 本文代码地址:https://github.com/xiaqijian/koa2-lessons/tree/master/lesson6 明天,我们将利用session实现登录状态判断 今天的这篇是在之前的代码基础

  • java web实现简单登录注册功能全过程(eclipse,mysql)

    目录 1.工程文件 2.DBBean.java 3.login.jsp 4.check.jsp 5.zhuce.jsp 6.zhuceck.jsp 7.success.jsp 8.zhucesu.jsp 9.数据库创造 总结 1.工程文件 基本的文件布局,没使用任何css文件,就是简单实现登录注册,页面没有做任何美化: 使用的是MySQL8.0.12,8一下的mysql链接代码有微小差别,网上教程基本都是8一下的,随便找找就能找到: 2.DBBean.java package Bean; imp

  • node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能

    同志们,经过不懈的努力,查了各种文档,终于鼓捣出了一个稍微像样一点的node项目,当然如果直接拿去项目里用,这个demo还太简单,毕竟一个完整的登录注册还有很多实际的内容,本案例mySQL的用户列表里,为便于理解,只设置了username 和password两个字段,正常的登录注册,肯定会有更多的字段的.但是对于初学node的人来说,比如笔者,还是学习到了不少内容,甚至,紧张的我不知如下下笔,肯定这个是参考了很多网上其他少年博客,以后这个登录注册demo会依据项目的需要而有所改进, 效果如下 效

  • SpringBoot创建JSP登录页面功能实例代码

    添加JSP配置 1.pom.xml添加jsp解析引擎 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.s

  • Spring+MongoDB实现登录注册功能

    本文实例为大家分享了Spring,Spring MVC,MongoDB实现登录注册 的具体代码,供大家参考,具体内容如下 工程目录: Spring配置文件: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springfra

随机推荐