javaWeb开发加密与验证公共方法

公共方法

  1. 加密工具类:提供数据加密和解密的方法,例如MD5加密、AES加密、Base64编码等。
  2. 验证工具类:提供数据验证和校验的方法,例如验证手机号码格式、邮箱格式、密码强度等。
  3. 文件操作工具类:提供文件上传、下载、读写等操作的方法,例如文件上传到服务器、读取文件内容、下载文件等。
  4. 时间日期工具类:提供时间日期格式化、解析和计算的方法,例如日期转换为字符串、字符串转换为日期、计算两个日期之间的差值等。
  5. 字符串处理工具类:提供字符串处理的方法,例如字符串判空、去除字符串的空格、拼接字符串等。
  6. 数字处理工具类:提供数字的格式化、计算和转换的方法,例如字符串转数字、保留指定小数位数、数字格式化为货币等。
  7. 参数校验工具类:提供常见参数校验的方法,例如检查参数是否为空、是否为正整数、是否在指定范围等。
  8. HTTP请求工具类:封装常见的HTTP请求方法,例如发送GET请求、POST请求、设置请求头、处理响应结果等。
  9. 缓存操作工具类:提供缓存读写和操作的方法,例如读取缓存、写入缓存、删除缓存等。
  10. 日志工具类:封装日志记录的方法,例如记录日志、设置日志级别、输出日志到控制台或文件等。

1.加密工具类

在JavaWeb开发中,我们经常需要处理用户敏感数据的加密,比如密码、令牌等。加密工具类可以提供各种加密算法的封装,如MD5加密、SHA加密、AES加密等。

MD5加密

1.特点
  • 1.长度固定:

    不管多长的字符串,加密后长度都是一样长
    作用:方便平时信息的统计和管理

  • 2.易计算:

    字符串和文件加密的过程是容易的.
    作用: 开发者很容易理解和做出加密工具

  • 3.细微性

    一个文件,不管多大,小到几k,大到几G,你只要改变里面某个字符,那么都会导致MD5值改变.
    作用:很多软件和应用在网站提供下载资源,其中包含了对文件的MD5码,用户下载后只需要用工具测一下下载好的文件,通过对比就知道该文件是否有过更改变动.

  • 4.不可逆性

    你明明知道密文和加密方式,你却无法反向计算出原密码.
    **作用:**基于这个特点,很多安全的加密方式都是用到.大大提高了数据的安全性

    2.后续讲解

    • 关于撞库破解:

      这是概率极低的破解方法,原理就是:

      1.建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文,不断的积累大量的句子,放在一个庞大的数据库里.

      2.比如一个人拿到了别人的密文,想去查询真实的密码,就需要那这个密文去到提供这个数据库的公司网站去查询.

    3.关于MD5加盐:

    比如我的银行密码是”12345”

    1.得到的MD5是:827ccb0eea8a706c4c34a16891f84e7b

    2.一个人截取到这个密文,那么通过撞库肯定容易撞出12345.

    3.我们要做的就是加盐,银行密码还是”12345”,然后我把银行密码加上我特定的字符串才计算MD5
    所以密码还是那个密码,但是变成求”12345密码加密987”的MD5值,然后再得到MD5,那么这个MD5起码可以确认那个数据库不会有.

​ 举例:

​ 1.对test表中password加密

​ (效果展示)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ (md5加密代码)

public class EncryptionUtils {

    public static String md5(String dateString) throws Exception {
        MessageDigest md5 = null;
        byte[] digest = MessageDigest.getInstance("md5").digest(dateString.getBytes("utf-8"));
        String md5code = new BigInteger(1, digest).toString(16);
        // 如果生成数字未满32位,需要前面补0
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }

 
}

​ (Service层调用)

    public String Register( Test test) throws Exception {


        LambdaQueryWrapper<Test> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(Test::getUsername,test.getUsername());
        Test registerTest = testService.getOne(queryWrapper);

        if(registerTest!=null){
            return "用户名已存在";
        }
        else{
            if(VerifyUtils.Phone(test.getPhoneNumber())==true&&VerifyUtils.Email(test.getEmail())==true){
                test.setPassword(EncryptionUtils.md5(test.getPassword()));
                testMapper.insert(test);
                return "注册成功";
            }
            else if (VerifyUtils.Phone(test.getPhoneNumber())==false){
                return "手机号格式错误";
            }
            else if (VerifyUtils.Email(test.getEmail())==false){
                return "邮箱格式错误";
            }
            else {
                return "注册失败";
            }
        }


    }

Jasypt介绍

什么是Jasypt?

Jasypt 是一个 java 库,可以使开发者不需要太多操作来给 Java 项目添加基本加密功能,而且不需要知道加密原理。Jasypt 为开发人员提供了一种简单易用加密功能,包括:密码认证、字符串加密等。

Jasypt 有哪些特点?

  • 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件
  • 适合集成到基于 Spring 的应用程序中
  • 用于加密应用程序(即数据源)配置的集成功能

哪些信息要加密呢?
一般来说,项目配置文件里,所有涉及信息安全的配置项(或字段)都应该做处理,典型的比如:

  • 数据库密码,如mysql
  • 第三方缓存中间件的密码,如 redis、mongodb
  • 其他中间件,如消息中间件、zk、nacos等
  • 各种第三方服务的 Access_Key

使用jasypt对配置加密

(添加依赖)

        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

(设置密钥)

jasypt.encryptor.password=密钥

(加密函数)

    public void getPass() {
        String url = encryptor.encrypt("数据库地址");
        String name = encryptor.encrypt("用户名");
        String password = encryptor.encrypt("密码");
        System.out.println("database url: " + url);
        System.out.println("database name: " + name);
        System.out.println("database password: " + password);
        Assert.assertTrue(url.length() > 0);
        Assert.assertTrue(name.length() > 0);
        Assert.assertTrue(password.length() > 0);
    }

(加密处理结果)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(修改配置文件)

spring.datasource.url=ENC(+96/a0hWaQ4lCdzzy3lfhk8l9icTyrZO2NnXw37V9dc22pkgbE7JnJHlQWVh28Jj6P+Rc0A/vITxcA40VCxfNg==)
spring.datasource.username=ENC(0M9MeFl8RHUXT8OdfebbtQ==)
spring.datasource.password=ENC(gLsxCuO75KU3cbojbDQT7g==)
jasypt.encryptor.password=密钥
2.验证工具类

​ 举例:

​ 验证邮箱和手机号码格式

​ (验证代码)

public class VerifyUtils {
    public static boolean Phone(String phoneNumber){
        boolean flag = false;
        try{
            String check = "^1[3-9]\\d{9}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(phoneNumber);
            flag = matcher.matches();
        }catch(Exception e){
            flag = false;
        }
        return flag;
    }

    public static boolean Email(String email){

        boolean flag = false;
        try{
            String check = "[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        }catch(Exception e){
            flag = false;
        }
        return flag;
    }
}

(Service层调用)

    public String Register( Test test) throws Exception {


        LambdaQueryWrapper<Test> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(Test::getUsername,test.getUsername());
        Test registerTest = testService.getOne(queryWrapper);

        if(registerTest!=null){
            return "用户名已存在";
        }
        else{
            if(VerifyUtils.Phone(test.getPhoneNumber())==true&&VerifyUtils.Email(test.getEmail())==true){
                test.setPassword(EncryptionUtils.md5(test.getPassword()));
                testMapper.insert(test);
                return "注册成功";
            }
            else if (VerifyUtils.Phone(test.getPhoneNumber())==false){
                return "手机号格式错误";
            }
            else if (VerifyUtils.Email(test.getEmail())==false){
                return "邮箱格式错误";
            }
            else {
                return "注册失败";
            }
        }


    }

))==false){
return “手机号格式错误”;
}
else if (VerifyUtils.Email(test.getEmail())==false){
return “邮箱格式错误”;
}
else {
return “注册失败”;
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值