java自封装加密摘要工具类

news2024/11/17 1:26:53

首先 可以去看这篇文章
Java md5加密 - 酷盖的小机灵 - 博客园
MessageDigest(加密)_禅悟刂的博客-CSDN博客_messagedigest
在实际开发中,需要将用户的密码这种敏感字段加密后存储到数据库中,千万不可以用明文存储。

加密原理

为了保证传输内容的正确性,需要对传输的内容生成摘要,如果内容被修改了,那么生成的摘要就不会一致,这就是我们要实现的封装类的原理。用户注册时,将用户密码利用摘要、加密算法处理后生成的无规则字符串存储到库中,用户登录时,对接收到的密码用同样的算法生成摘要,与库中存储的密串进行对比,即可。
经典的摘要算法有MD5、SHA-1等。

封装工具类

MD5的加密方式是一个比较经典的加密方式,
在一些框架中,都提供了一些MD5加密的方式。
JDK中提供了MD5加密的方法,在没有框架时,可以自己封装一个MD5工具类来实现MD5加密。
MD5原理是一个单向的哈希函数,他可以接收任意长度大小的数据,输出固定长度的哈希值。
MD5算法得到一个固定的128bit的二进制串,为了更好的表示,一般会将这个二进制串转换为16进制。

首先你需要知道JDK中提供的一个类MessageDigest,这个类是JDK提供的一个加密算法的引擎类,在实例化时,指定一种加密、摘要算法,就可以得到一个具有加密、摘要的功能的实例对象

public static String getMD5Str(String str) {  
    byte[] digest = null;  
    try {  
        // 获取一个指定算法的摘要对象  
        MessageDigest md5 = MessageDigest.getInstance("md5");  
        // 需要传入一个字节数组并返回一个摘要生成后的字节数组  
        // 利用digest传入字节数组生成最终的摘要
        digest = md5.digest(str.getBytes("utf-8"));  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    //16是表示转换为16进制数  
    // 将字节数组转换为16进制  
    String md5Str = new BigInteger(1, digest).toString(16);  
    return md5Str;  
}  
  
public static void main(String[] args) {  
    String str = getMD5Str("lmk");  
    System.out.println(str);  
}

或者

public static String getMD5(String str){  
    byte[] bytes = null;  
  
    try {  
        MessageDigest md5 = MessageDigest.getInstance("MD5");  
        // 利用update方法将待摘要文本放入  
        md5.update(str.getBytes("utf-8"));  
        // 利用digest方法生成  
        bytes = md5.digest();  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    return new BigInteger(bytes).toString(16);  
}

完善

直接利用这样的MD5单向摘要是容易被别人暴力破解的,一般当后台接收到用户的密码后,需要在原始字符串前后拼接上一段子串,然后再去计算摘要值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[旭日X3派] 初识篇 - 02

开局先给整个详细产品参数~ 处理器地平线旭日 X3M 芯片CPU四核 ARM Cortex-A531.2GHzBPU双核 1GHz,等效算力 5 TOPS内存2G/4G Byte LPDDR4存储器外置TF卡摄像头MIPI CSI 2lane 2显示接口HDMI 1 (up to 1920 1080); MIPI-DSI 1 (up to 1920 1080);USB HostUSB …

[Android移动安全渗透基础教程] 工具篇

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 0x01 从 Play Store中提取 .apk 文件 1.1 问题的来源 当想要从 Play S…

ComponentOne Studio WPF部署功能完全兼容

ComponentOne Studio WPF部署功能完全兼容 ComponentOne WPF Edition是一组易于使用的WPF组件,包括.NET应用程序的高级网格、图表、报告和调度控件。ComponentOne WPF控件使用XAML构建,以促进团队协作,并与Windows Presentation Foundation的…

ChatGPT ,能替代程序员吗?

最近朋友圈都在聊一个ai,知乎甚至一度上了热榜,现在已经有540个回答了 好嘛,既然咱也是个程序员,这不得体验一波? 当我火急火燎的点开时 乳化,赤裸裸的乳化! 体验 问题不大,还有闲…

Nacos的服务心跳

nacos的实例分为临时实例和永久实例两种,相应的不同的实例会用有不同的心跳机制. 临时实例基于心跳方式做健康检测,永久实例是有Nacos主动探测实例状态. 可以通过在yaml文件配置. spring:application:name: order-servicecloud:nacos:discovery:ephemeral: false # 设置实例为…

举个栗子~Minitab 技巧(6):使用 T 检验 分析产品质量

在企业生产过程中,我们往往需要对产品质量负责。最常见的场景是,如何判断生产线中的产品,是否满足质量标准?比如,某工厂现有一批产品,目标生产重量是 20g,通过随机抽取不同的产品,如…

springsecurity

目录 一、权限管理简介 1、什么是权限管理 2、认证 2、基于资源的访问控制 三、Spring Security概述 1,Spring Security简介 2、Spring Security快速入门 2.1、引入依赖 2.2、创建一个控制器 2.3、启动项目 四、Spring Security 认证配置 1、WebSecurity…

公司自研组件库打包之后chunk.css文件25W行代码

项目场景: 基于Antd开发的UI组件库,主要分为两部分。 一部分是基础组件,直接在Antd的基础上包了一层,然后根据自身需求拓展了新的功能。如: input的状态除了本身支持的error和warning两种,额外增加了成功的…

手写JS—深拷贝

什么是深拷贝 一个引用对象一般来说由两个部分组成:一个具名的Handle,也就是我们所说的声明(如变量)和一个内部(不具名)的对象,也就是具名Handle的内部对象。它在Manged Heap(托管堆…

Real diff算法是怎么运作的?

React 的 Reconciliation 算法原理 React 的渲染机制 Reconciliation 过程 React 采用的是虚拟 DOM (即 VDOM ),每次属性 (props) 和状态 (state) 发生变化的时候,render 函数返回不同的元素树,React 会检测当前返回的元素树和上次渲染的元素…

论文阅读笔记 | 三维目标检测——PV-RCNN算法

如有错误,恳请指出。 文章目录1. 背景2. 网络结构2.1 Feature Encoder and Proposal Generation2.2 voxel-to-keypoint scene encoding2.3 Keypoint-to-grid RoI Feature Abstraction3. 实验部分paper:《PV-RCNN: Point-Voxel Feature Set Abstraction f…

JavaScript -- DOM事件总结

文章目录事件1 事件对象简介2 Event对象3 冒泡4 事件的委派5 事件的捕获事件 1 事件对象简介 事件对象是由浏览器在事件触发时所创建的对象,这个对象中封装了事件相关的各种信息通过事件对象可以获取到事件的详细信息比如:鼠标的坐标、键盘的按键…浏览…

单频信号的相位谱计算与误差修正-附Matlab代码

一、问题描述 我们在实际处理时经常遇到只有一个正弦信号的情况,其频率为 f0{{f}_{0}}f0​,在谱分析以后,除了在频率为 f0{{f}_{0}}f0​处有相位数值外,其他频率处都有相位数值,分析其他频谱出现相位值的原因。 例如…

外部tomcat资源整合

Spring Boot应用默认是以jar包方式运行的,Springboot默认有内置的tomcat,在启动的时候会自动的将项目发布,这样各有利弊。 优点:简单,便携 缺点:不支持jsp, 定制优化比较麻烦,需要自己编写ser…

如何开发一个婚恋交友系统?开发功能特点有什么?

婚恋平台为年轻人开启了一个交流恋爱的方式,一方面为的是适龄的年轻单身人士,另一方面为一部分大龄单身人士,解决单很多身人 士的需求,婚恋平台的开发,跟随着互联网的发展,抢占了小程序的热门市场&#xf…

Java线程实现

内容引用自《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明》 线程的实现 我们知道,线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和 执行调度分开,各个…

React框架入门

React是用于构建用户界面的JavaScript库, 起源于Facebook的内部项目,该公司对市场上所有 JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。于2013年5月开源 一、React简介 React以声明式编写 UI&a…

0119 动态规划 Day8

剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1…

计算机的硬件系统和软件系统的关系

计算机的硬件系统和软件系统的关系是缺一不可。 硬件它是所有软件运行的物质基础。 与硬件直接接触的是操作系统,它处在硬件和其他软件之间,表示它向下控制硬件,向上支持其他软件。 在操作系统之外的各层分别是各种语言处理程序、数据库管理…

CleanMyMacX4.12.1Crack版本频繁弹密码 菜单浮窗无法显示显示空白解决办法

你们有没有出现过在使用 CleanMyMac 清理系统垃圾文件的时候会频繁弹出输入开机密码?那么该如何解决这个问题呢?跟着小编来看看解决方法吧! 频繁输入密码 更新CleanMyMacX到4.12.1的Crack版本之后,发现做一些操作要一直输入密码&…