首页 > 编程语言 >SpringBoot | 加密算法使用示例

SpringBoot | 加密算法使用示例

时间:2023-09-27 09:55:51浏览次数:53  
标签:AES 加密 String 示例 decrypt return new 加密算法 SpringBoot

欢迎参观我的博客,一个Vue 与 SpringBoot结合的产物:https://poetize.cn

原文链接:https://poetize.cn/article?id=41

MD5加密

private static String md5(String input) {
    if (input == null || input.length() == 0) {
        return input;
    }
    try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(input.getBytes(StandardCharsets.UTF_8));
        byte[] byteArray = md5.digest();

        StringBuilder sb = new StringBuilder();
        for (byte b : byteArray) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    } catch (Exception e) {
        return input;
    }
}

MD5加密特点

  • 针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串(通常是32位的16进制字符串)
  • 其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开
  • 运算简便,且可实现方式多样,通过一定的处理方式也可以避免碰撞算法的破解(加盐:随机字符串)
  • 对于一个固定的字符串,数字等等,MD5加密后的字符串是固定的,也就是说不管MD5加密多少次,都是同样的结果

AES对称加密

@Slf4j
public class AesUtils {

    /**
     * 算法
     *
     * AES/CBC/PKCS5Padding:表示使用AES算法进行加密,采用CBC模式来处理数据块之间的链接,同时使用PKCS5Padding进行数据填充,以确保数据可以有效地被块加密。
     */
    private static final String ALGORITHMSTR = "AES/CBC/PKCS5Padding";

    /**
     * 密钥 (需要前端和后端保持一致)十六位作为密钥
     */
    private static final String key = "";

    /**
     * 密钥偏移量 (需要前端和后端保持一致)十六位作为密钥偏移量
     */
    private static final String iv = "";


    /**
     * @param decrypt 待加密的字符串
     * @name: encrypt
     * @description: 将字符串进行AES加密
     * @return: java.lang.String 加密后的string
     */
    public static String encrypt(String decrypt) {
        try {
            //算法/模式/补码方式
            Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
            //使用CBC模式,需要一个向量iv,可增加加密算法的强度
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"), ivParameterSpec);
            byte[] encrypted = cipher.doFinal(decrypt.getBytes());
            //此处使用BASE64做转码功能,同时能起到2次加密的作用
            return new BASE64Encoder().encodeBuffer(encrypted);
        } catch (Exception e) {
            log.info("加密异常 decrypt = {}, {}", decrypt, e.getMessage());
            throw new Exception("加密异常!");
        }
    }

    /**
     * @param encrypt 待解密的base 64 code
     * @name: decrypt
     * @description: 将base 64 code AES解密
     * @return: java.lang.String 解密后的string
     */
    public static String decrypt(String encrypt) {
        try {
            byte[] encrypted = new BASE64Decoder().decodeBuffer(encrypt);
            Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"), ivParameterSpec);
            byte[] decryptBytes = cipher.doFinal(encrypted);
            return new String(decryptBytes);
        } catch (Exception e) {
            log.info("加密异常 encrypt = {}, {}", encrypt, e.getMessage());
            throw new Exception("解密异常!");
        }
    }
}

标签:AES,加密,String,示例,decrypt,return,new,加密算法,SpringBoot
From: https://www.cnblogs.com/loveer/p/17731970.html

相关文章

  • SpringBoot | Dubbo之Filter使用示例
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Redis序列化与分布式锁
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Jackson序列化
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • Golang method | Interfaces 示例
    方法与接口(methodInterface) packageinterFacesimport("fmt""log")//managerAppstoreonlineaccounttypeAccountstruct{surNamestringgivenNamestring}//方法的调用如果需要对调用对象做修改操作,则需要使用`*`引用其指针创建方法。func(a*Acc......
  • 新手指引:前后端分离的springboot + mysql + vue实战案例
    案例说明:使用springboot+mysql+vue实现前后端分离的用户查询功能。1、mysql:创建test数据库->创建user数据表->创建模拟数据;2、springboot:配置mysql->使用mybatis操作mysql数据库->接口开发;3、vue:使用axios访问接口->user数据展示;1、mysql数据库1.1、安......
  • springboot大文件上传、分片上传、断点续传、秒传的实现
    对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,从上传的效率来看,利用多线程并发上传能够达到最大效率。 本文是基于springboot+vue实现的文件上传,本文主要介绍服务端实现文件上传的......
  • 基于springboot学生请假管理系统-计算机毕业设计源码+LW文档
    摘要:本学生请假管理系统是针对目前学生请假的实际需求,从实际工作出发,对过去的学生请假管理系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。本系统结合计算机系统的结构、概念、模型、原理......
  • Python之html2text:将HTML转换为Markdown文档示例详解
    From: https://mp.weixin.qq.com/s/Pa3NDXOseyg0mIn869mbhQ-----------------------------------------------------------------------------------------hello大家好我是Monday,本文将详细介绍如何使用Python库中的html2text模块来实现将HTML转换为Markdown的操作,并提供示例......
  • SpringBoot 整合 Devtools 热部署工具
    什么是热部署实际开发过程中,修改应用的业务逻辑代码时常常需要重启应用,这显得非常繁琐,降低了开发效率,所以热部署对于开发来说显得十分必要。应用启动后会把编译好的Class文件加载到虚拟机中,正常情况下载项目修改了Java源文件是需要全部重新编译并加载(需要重启应用),而热部署......
  • SpringBootAdmin_监控
    监控的意义监控服务状态是否宕机监控服务运行指标(内存、虚拟机、线程、请求等)监控日志管理服务(服务下线)监控的实施方式大部分监控平台都是主动拉取监控信息,而不是被动地等待应用程序传递信息应用程序要设置:是否能被监控、开放那些信息给显示监控信息的服务器(监控平台......