java - 散列算法 SHA-256 hash值计算

news2025/4/19 15:50:12

文章目录

  • 前言
    • java - 散列算法 SHA-256 hash值计算
      • 1. 散列算法是什么?
      • 2. 散列算法的主要特征是什么?
      • 3. 计算SHA-256值有没有可能重复
      • 4. SHA-256算法实现示例

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


java - 散列算法 SHA-256 hash值计算

1. 散列算法是什么?

散列算法(Hashing Algorithm)是一种将任意长度的输入数据转换为固定长度的输出数据(通常是固定大小的哈希值)的数学函数。

2. 散列算法的主要特征是什么?

  1. 固定长度输出:无论输入数据的大小如何,散列算法生成的哈希值都具有相同的固定长度。

  2. 高效性:散列算法通常具有高度的计算效率,能够快速生成哈希值。

  3. 不可逆性:散列算法是单向的,即从哈希值无法还原出原始数据。这意味着无法通过哈希值来获取原始数据的内容。

  4. 唯一性:不同的输入数据经过散列算法处理后应该生成不同的哈希值,但由于输出长度是固定的,可能会发生哈希冲突,即不同的输入生成相同的哈希值。

  5. 相似输入产生不同输出:即使输入数据只有微小的变化,也会导致生成完全不同的哈希值。这被称为“雪崩效应”。

注意的是散列算法生成固定长度的哈希值,但是哈希值是不可逆的,无法还原回原始数据。

3. 计算SHA-256值有没有可能重复

SHA-256(Secure Hash Algorithm 256-bit)是一个加密哈希函数,它的设计目标是尽可能地降低哈希冲突的概率,即不同的输入数据尽量生成不同的哈希值。SHA-256 算法的输出长度是256位(32字节),这意味着它可以表示的不同哈希值数量非常庞大,大约为 2^256(约等于 1.1579209e+77)个。

由于SHA-256 算法的输出空间如此巨大,理论上来说,对于不同的输入数据,生成相同的SHA-256哈希值的可能性是极其微小的,几乎可以忽略不计。这种微小的可能性通常只有在恶意的攻击(如碰撞攻击)或者算法本身存在漏洞的情况下才会出现。

4. SHA-256算法实现示例


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA {

    public static String encrypt(String msg){
        MessageDigest digest = null;
        try {
            digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(msg.getBytes());
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                hexString.append(String.format("%02x", b));
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            // 处理算法不可用的情况
            e.printStackTrace();
        }
        return null;
    }


}

测试类:

import lombok.extern.slf4j.Slf4j;
import org.example.DemoCommonTool;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoCommonTool.class)
@Slf4j
public class SHATest  {

    @Test
    public void test(){
        for (int i = 0;i<20;i++) {
            log.info("========================start==================================");
            log.info(SHA.encrypt("sahihalfh那可是当年卢卡斯电话撒豆i阿娇哦i骄傲啊搜饿哦i回复还是分开爱上了凯迪拉克三分而我和日和坊双方的哈利好的啊合法身份安徽疯狂撒法鲁克安家费 "));
            log.info(SHA.encrypt("还是分开23432 和开发建设234 大佬"));
            log.info(SHA.encrypt("DSHFKJ32"));
            log.info("========================end==================================");
        }
    }

}



测试结果:

在这里插入图片描述

测试成功!!!

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

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

相关文章

Python实现MYSQL蜜罐

1 LOAD DATA INFILE介绍 首先开启一个Mysql&#xff0c;看一下mysql是如何读取主机文件的。 1.1 linux搭建mysql 1&#xff09;docker运行mysql 2&#xff09;启动Mysql docker run -itd…

【docker安装Mysql并配置主从复制】

Mysql主从复制 目的&#xff1a; 是为了后面naocs集群的服务配置做准备工作 准备工作 准备至少两台虚拟机或服务器&#xff0c;安装好了docker&#xff0c;找到他们的ip地址 后面操作都用xshell操作来代替 拉取并启动mysql镜像和容器 主机的命令为mysql01&#xff0c;对…

综述 | 实时三维形状测量技术的综述

原创 | 文 BFT机器人 随着人工智能和机器人技术的快速发展&#xff0c;实时三维形状测量技术变得愈发重要。由于机器人通常在动态环境中操作&#xff0c;因此机器人装备的三维形状测量技术需要能够实时从运动的物体中获取三维形状信息。未来的三维机器视觉技术实际上依赖于实时…

个人博客搭建记录

个人博客地址&#xff1a;www.jiasun.top 使用github pagehexo搭建&#xff0c;主题为fluid&#xff0c;搭建步骤参照&#xff1a;Github hexo 实现自己的个人博客、配置主题&#xff08;超详细&#xff09; 主题&#xff1a;https://hexo.fluid-dev.com/ 搭建时的问题&…

eNSP模拟器!通过Cloud云使本机与模拟器互通,成功通过ssh登陆设备!

首先配置云接口&#xff1a; 配置路由器IP地址&#xff1a; [Huawei]int g 0/0/0 [Huawei-GigabitEthernet0/0/0]ip ad 192.168.56.2 24 用本机去ping路由器&#xff0c;路由器成功与本机互通。 ssh登陆配置&#xff1a; [Huawei]user-interface vty 0 4 [Huawei-ui-vty0-4]…

计算物理专题----随机游走实战

计算物理专题----随机游走实战 Problem 1 Implement the 3D random walk 拟合线 自旋的 拟合函数&#xff08;没有数学意义&#xff09; 参数&#xff1a;0.627,3.336,0.603&#xff0c;-3.234 自由程满足在一定范围内的均匀分布以标准自由程为单位长度&#xff0c;…

ETHERCAT转MODBUS TCP/IP协议网关

产品介绍 JM-ECT-TCPIP是自主研发的一款EtherCAT从站功能的通讯网关。该产品主要功能是将EtherCAT网络和 TCP/IP 网络连接起来。 本网关连接到EtherCAT总线中做为从站使用&#xff0c;连接到 TCP/IP 网络中做为服务器或客户端使用。 产品参数 技术参数 u 网关做为EtherCAT网…

Docker容器数据持久化存储机制

这里写目录标题 一、Docker容器数据持久化存储介绍二、Docker容器数据持久化存储方式三、Docker容器数据持久化存储方式应用案例演示3.1 docker run -v3.1.1 创建了本地目录3.1.2 未创建本地目录 3.2 volumes3.2.1 创建数据卷3.2.2 使用数据卷 一、Docker容器数据持久化存储介绍…

Dynaform 7.0安装说明教程

Dynaform 7.0安装说明教程 1.安装ANSYS License Manager 2023R2 2.用有裂纹的程序文件夹覆盖原始<ANSYS Inc>程序文件夹&#xff08;默认设置为&#xff1a;C:\program Files\ANSYS Inc&#xff09; 3.运行程序>ANSYS&#xff0c;股份有限公司许可管理器>ANSYS许…

安装封箱机需要的条件

任何设备的安装都需要一定的场地条件&#xff0c;封箱机产品也不例外&#xff0c;对于初次使用封箱机的用户&#xff0c;我们会仔细提醒客户需要准备的条件&#xff0c;今天就把这些条件和大家分享一下&#xff0c;方便您今后更方便的使用封箱机产品。 1、适当的场地。用户在购…

【C++】C++11——构造、赋值使用条件和生成条件

移动构造和移动赋值生成条件移动构造和移动赋值调用逻辑强制生成默认函数的关键字default禁止生成默认函数的关键字delete 移动构造和移动赋值生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件为&#xff1a; 移动构造函数的生成条件&#xff1a;没有自己实现的移动…

Redis GEO 类型与 API 结合,地理位置优化的绝佳实践

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Linux下的网络编程——网络基础、socket编程(一)

前言&#xff1a; 前面我们学习了Linux的系统编程&#xff0c;从今天我们就要开始Linux网络编程的学习了&#xff0c;Linux网络编程中的知识点可能没有前面的Linux系统多一点&#xff0c;但是基础的网络知识我们还是需要了解的&#xff0c;并且网络编程中的socket编程的知识也…

打赏收款收银台多合一支付收款HTML源码

多合一打赏支付收款&#xff08;微信、QQ、支付宝&#xff09; 源码直接上传到服务器解压缩即可访问,或者用本地浏览器打开访问 PS&#xff1b;只需要将自己的收款二维码替换即可 该源码全开源无加密&#xff0c;所有操作均在本地无需调用外部资源防止失效&#xff01; 源码…

微前端架构的几种技术选型

微前端架构的几种技术选型随着SPA大规模的应用&#xff0c;紧接着就带来一个新问题&#xff1a;一个规模化应用需要拆分。 一方面功能快速增加导致打包时间成比例上升&#xff0c;而紧急发布时要求是越短越好&#xff0c;这是矛盾的。另一方面当一个代码库集成了所有功能时&am…

【校招VIP】java语言考点之反射

考点介绍&#xff1a; java的反射(reflection)机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以了解任意一个对象所属的类&#xff0c;可以了解任意一个类的成员变量和方法&#xff0c;可以调用任意一个对象的属性和方法。这种动态获取程序信息…

探索工业路由器如何助力无人驾驶方案的突破性解析

随着无人驾驶技术的发展&#xff0c;越来越多的企业和组织开始部署无人驾驶车辆来提高运输效率和安全性。在这些方案中&#xff0c;工业路由器被广泛应用于建立稳定、安全和高效的通信网络。在本篇文章中&#xff0c;我们将分享一个真实的无人驾驶方案部署案例&#xff0c;其中…

laravel设置与获取header请求头

laravel设置与获取header请求头 设置 <?phpnamespace App\Http\Controllers\Text;use Illuminate\Http\Request; use App\Http\Controllers\Controller;class TextController extends Controller {public function TextCC(Request $request){$token $request->header(j…

【函数进阶】

函数进阶 1 本节目标2 函数的定义和调用2.1 函数的定义方式2.2 函数的调用方式 3 this3.1 函数内 this 的指向3.2 改变函数内部 this 的指向3.2.1 call方法3.2.2 apply方法3.2.3 bind方法3.2.4 call apply bind 总结 4 严格模式4.1 什么是严格模式4.2 开启严格模式4.2.1 为脚本…