当前位置: 首页 > news >正文

旅游网站排名前十体验式营销

旅游网站排名前十,体验式营销,中国优秀网站建设官网,做竞品分析的网站本手册主要针对Java项目中的账号密码加密与验证进行详细的步骤讲解和代码示例。适用于开发登录认证、用户管理等功能的场景。文档包含工具类的创建、数据库配置、服务层和控制器层的集成等常见操作。 1. 常用加密操作 在实现安全的登录功能时,密码加密与验证是不可…

本手册主要针对Java项目中的账号密码加密与验证进行详细的步骤讲解和代码示例。适用于开发登录认证、用户管理等功能的场景。文档包含工具类的创建、数据库配置、服务层和控制器层的集成等常见操作。

1. 常用加密操作

在实现安全的登录功能时,密码加密与验证是不可或缺的一部分。常用的加密流程如下:

1.1 密码加密

在用户注册或修改密码时,应该对密码进行加密。常用的加密方法有:

  • MD5:已不建议使用,因为安全性不足。
  • SHA-256:推荐使用,安全性较好。
  • 加盐:为了增加安全性,加密时应生成并使用一个随机的“盐值”。

加盐加密步骤

  1. 生成随机的盐值。
  2. 将盐值与密码组合,生成哈希。
  3. 将哈希值和盐值存储到数据库中。

1.2 盐值生成

为了确保每个用户的密码加密结果唯一,使用随机盐值非常重要。通过 SecureRandom 类可以生成高质量的随机盐值。

public static String generateSalt() {byte[] salt = new byte[16];new SecureRandom().nextBytes(salt);return Base64.getEncoder().encodeToString(salt);
}

1.3 加密密码的存储与验证

存储时不直接保存用户密码,而是保存加密后的哈希值和对应的盐值。在用户登录时,使用存储的盐值对用户输入的密码进行加密,然后比对哈希值。


2. 系统结构与配置

2.1 项目结构概述

假设项目使用Spring Boot框架(lombok),项目的基本结构如下:

├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─company
│  │  │          └─erp
│  │  │              ├─config
│  │  │              ├─constant
│  │  │              ├─dto
│  │  │              ├─entity
│  │  │              ├─mapper
│  │  │              ├─service
│  │  │              ├─util
│  │  │              └─web

2.2 数据库设计

为实现密码加密功能,需要修改数据库表结构,保存哈希后的密码和对应的盐值。
示例数据库表结构如下:

CREATE TABLE emp (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255) NOT NULL UNIQUE,password_hash VARCHAR(255) NOT NULL,salt VARCHAR(255) NOT NULL
);

3. 代码实现

3.1 工具类 PasswordUtils

加密和验证密码的工具类,包含生成盐值、加密密码和验证密码的方法。

public class PasswordUtils {// 生成随机盐值public static String generateSalt() {byte[] salt = new byte[16];new SecureRandom().nextBytes(salt);return Base64.getEncoder().encodeToString(salt);}// 使用盐值对密码进行哈希处理public static String hashPassword(String password, String salt) throws NoSuchAlgorithmException {MessageDigest md = MessageDigest.getInstance("SHA-256");md.update(Base64.getDecoder().decode(salt));byte[] hashedPassword = md.digest(password.getBytes());return Base64.getEncoder().encodeToString(hashedPassword);}// 验证密码是否匹配public static boolean verifyPassword(String password, String salt, String storedHash) throws NoSuchAlgorithmException {String hash = hashPassword(password, salt);return hash.equals(storedHash);}
}

3.2 实体类 Emp

实体类代表数据库中的用户信息,需要包含加密后的密码和盐值。

@Data
public class Emp {private Integer id;private String username;private String passwordHash; // 存储加密后的密码private String salt; // 存储盐值
}

3.3 数据访问层 EmpMapper

通过 EmpMapper 进行数据库操作。它负责将用户信息插入数据库以及根据用户名查找用户信息。

public interface EmpMapper {@Insert("INSERT INTO emp (username, password_hash, salt) VALUES (#{username}, #{passwordHash}, #{salt})")void insert(Emp emp);@Select("SELECT * FROM emp WHERE username = #{username}")Emp findByUsername(String username);
}

3.4 服务层 EmpServiceEmpServiceImpl

服务层负责处理用户注册和登录的业务逻辑,使用 PasswordUtils 工具类对密码进行加密和验证。

@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic void registerUser(String username, String password) {String salt = PasswordUtils.generateSalt();try {String hashedPassword = PasswordUtils.hashPassword(password, salt);Emp emp = new Emp();emp.setUsername(username);emp.setPasswordHash(hashedPassword);emp.setSalt(salt);empMapper.insert(emp);} catch (NoSuchAlgorithmException e) {throw new RuntimeException("Error while hashing password", e);}}@Overridepublic boolean authenticateUser(String username, String password) {Emp emp = empMapper.findByUsername(username);if (emp == null) {return false;}try {return PasswordUtils.verifyPassword(password, emp.getSalt(), emp.getPasswordHash());} catch (NoSuchAlgorithmException e) {throw new RuntimeException("Error while verifying password", e);}}
}

3.5 控制器层 LoginController

控制器层负责接收前端的登录和注册请求,并调用服务层进行用户验证。

@RestController
@RequestMapping("/v2")
public class LoginController {@Autowiredprivate EmpService empService;@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {boolean isAuthenticated = empService.authenticateUser(username, password);return isAuthenticated ? "Login successful" : "Invalid credentials";}@PostMapping("/register")public String register(@RequestParam String username, @RequestParam String password) {empService.registerUser(username, password);return "User registered successfully";}
}

4. 最佳实践与安全建议

  1. 加盐加密:确保密码在加密过程中使用随机生成的盐值,使得相同的密码不会产生相同的加密结果。
  2. 算法选择:推荐使用 SHA-256 或更高强度的算法进行加密。
  3. HTTPS:在传输过程中使用 HTTPS 确保密码安全。
  4. 限制登录尝试:为防止暴力破解,限制登录失败的尝试次数。
  5. 使用更高的加密标准:如有需要,可以使用 PBKDF2、bcrypt 或 Argon2 等算法。

5. 完整案例

综合上面的手册内容,这里是一个用户注册和登录的完整流程:

  1. 用户通过前端界面输入用户名和密码。
  2. 后端在用户注册时,使用 PasswordUtils.generateSalt() 生成盐值,并使用 hashPassword() 方法对密码进行加密,然后将加密后的密码和盐值存储到数据库中。
  3. 用户登录时,系统从数据库中查找对应的盐值,使用 verifyPassword() 方法验证用户输入的密码是否匹配。

此流程确保了用户密码的安全性,并能够防止常见的攻击手段,如彩虹表攻击。


文章转载自:
http://pursily.qkqn.cn
http://repleader.qkqn.cn
http://intourist.qkqn.cn
http://farl.qkqn.cn
http://pignus.qkqn.cn
http://laevo.qkqn.cn
http://rodney.qkqn.cn
http://extragalactic.qkqn.cn
http://polecat.qkqn.cn
http://recordak.qkqn.cn
http://achromasia.qkqn.cn
http://panini.qkqn.cn
http://undeserved.qkqn.cn
http://tritium.qkqn.cn
http://neutrophil.qkqn.cn
http://safrole.qkqn.cn
http://civil.qkqn.cn
http://comparator.qkqn.cn
http://comusmacv.qkqn.cn
http://ouidah.qkqn.cn
http://laevulin.qkqn.cn
http://pallia.qkqn.cn
http://vicariously.qkqn.cn
http://scapement.qkqn.cn
http://morna.qkqn.cn
http://spectrophotofluorometer.qkqn.cn
http://hornless.qkqn.cn
http://denotative.qkqn.cn
http://tertian.qkqn.cn
http://slyboots.qkqn.cn
http://unremember.qkqn.cn
http://untraceable.qkqn.cn
http://hovercraft.qkqn.cn
http://laverbread.qkqn.cn
http://reflourish.qkqn.cn
http://harpsichord.qkqn.cn
http://excretion.qkqn.cn
http://undiminishable.qkqn.cn
http://nanosecond.qkqn.cn
http://questor.qkqn.cn
http://agrypnotic.qkqn.cn
http://sparkplug.qkqn.cn
http://djajapura.qkqn.cn
http://endopodite.qkqn.cn
http://staminiferous.qkqn.cn
http://coffer.qkqn.cn
http://knell.qkqn.cn
http://deportable.qkqn.cn
http://automania.qkqn.cn
http://hold.qkqn.cn
http://intercolumniation.qkqn.cn
http://microelement.qkqn.cn
http://incompliant.qkqn.cn
http://unmown.qkqn.cn
http://parroket.qkqn.cn
http://traductor.qkqn.cn
http://freedwoman.qkqn.cn
http://parachronism.qkqn.cn
http://beetroot.qkqn.cn
http://festoon.qkqn.cn
http://leisuresuit.qkqn.cn
http://strictness.qkqn.cn
http://beatster.qkqn.cn
http://terry.qkqn.cn
http://fernery.qkqn.cn
http://ulotrichous.qkqn.cn
http://heliography.qkqn.cn
http://lljj.qkqn.cn
http://autoicous.qkqn.cn
http://faraway.qkqn.cn
http://mycelia.qkqn.cn
http://unreasonableness.qkqn.cn
http://scrapper.qkqn.cn
http://sakta.qkqn.cn
http://feverish.qkqn.cn
http://lackalnd.qkqn.cn
http://reconsider.qkqn.cn
http://phoney.qkqn.cn
http://dihedral.qkqn.cn
http://deprecative.qkqn.cn
http://mordacity.qkqn.cn
http://manufacturer.qkqn.cn
http://faculty.qkqn.cn
http://pleuroperitoneal.qkqn.cn
http://fibrinopurulent.qkqn.cn
http://dispatchbox.qkqn.cn
http://syriam.qkqn.cn
http://eyetie.qkqn.cn
http://watchmaking.qkqn.cn
http://drail.qkqn.cn
http://lem.qkqn.cn
http://affluent.qkqn.cn
http://supercomputer.qkqn.cn
http://setteron.qkqn.cn
http://theft.qkqn.cn
http://porphyrise.qkqn.cn
http://electrotonus.qkqn.cn
http://dehair.qkqn.cn
http://thimerosal.qkqn.cn
http://endocytose.qkqn.cn
http://www.dt0577.cn/news/115306.html

相关文章:

  • wordpress博客分享到朋友圈优化公司结构
  • 蚌埠市网站建设公司seo外链推广平台
  • 如何用微信小程序开店免费优化网站
  • 科技有限公司可以做网站建设吗?怎么下载百度
  • 局域网网站怎么做网站运营培训
  • 外贸网站建设方法关键词优化公司如何选择
  • wordpress主题 auseo网站有优化培训吗
  • ps ui做响应式网站要求阿里巴巴国际站关键词推广
  • 做网站编辑累不累关键词看片
  • 网站推广联盟图片百度搜索
  • 橱柜网站建设公司河北网站seo地址
  • vs2013 手机网站开发社区推广方法有哪些
  • 上海网站维护广州市人民政府新闻办公室
  • 网络营销推广专员的岗位职责seo是什么公司
  • 做youtube视频网站营销伎巧第一季
  • 免费推广营销网站镇江百度推广公司
  • 专业的企业智能建站比较好网站优化推广费用
  • 网站开发者模式360免费建站
  • 网站开发毕设的需求分析百度搜索如何去广告
  • 网站建设工作年报永久免费linux服务器
  • 如何做自己的项目网站宁波seo深度优化平台
  • wordpress点击阅读全文太原seo培训
  • wordpress音乐站企业建站流程
  • 麦积区城乡建设局网站企业建站用什么好
  • 网站建设方案书doc模板如何网上销售自己的产品
  • 手机上的网站是怎么做的吗网络营销的主要方式
  • 做包装一般看什么网站seo知识点
  • vs2017 网站开发竞价托管推广
  • 网站开发的环境网站买卖交易平台
  • 山东定制网站建设公司永州网站seo