电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java簡易登錄注冊功能實現代碼解析

瀏覽:57日期:2022-08-31 08:38:42

哈希算法(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>(),避免NullPointerExceptionuserInfoSet = 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>(),避免NullPointerExceptionuserInfoSet = new HashSet<String>();}if (userNameSet == null) { // 若尚無用戶注冊,則new HashSet<String>(),避免NullPointerExceptionuserNameSet = 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 ''; // 若異常則返回空字符串}}}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 铸铁平台,大理石平台专业生产厂家_河北-北重机械 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 恒温水槽与水浴锅-上海熙浩实业有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 鄂泉泵业官网|(杭州、上海、全国畅销)大流量防汛排涝泵-LW立式排污泵 | 郑州墨香品牌设计公司|品牌全案VI设计公司| 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 自动部分收集器,进口无油隔膜真空泵,SPME固相微萃取头-上海楚定分析仪器有限公司 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | LNG鹤管_内浮盘价格,上装鹤管,装车撬厂家-连云港赛威特机械 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 智能终端_RTU_dcm_北斗星空自动化科技 | 耐高温电缆厂家-远洋高温电缆| 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 |