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

Java常用工具算法-5--哈希算法、加密算法、签名算法关系梳理

1、哈希算法

  • 数学本质:将任意长度输入(明文)映射为固定长度输出(哈希值,也称摘要)。
  • 主要特点:
    • 不可逆性:无法通过哈希值反推原始输入。
    • 雪崩效应:输入的微小变化导致哈希值变化很大。
    • 抗碰撞性:不同输入生成相同哈希值,但相对概率较低。
  • 常见算法:
    • SHA256或SHA-3算法,相对碰撞很低,推荐使用。
    • MD5或SHA-1算法,容易产生冲突,不建议使用。

2、加密算法

  • 数学本质:明文通过密钥加密为密文,密文通过密钥可逆向解密为明文。
  • 主要特点:
    • 对称加密:加密和解密使用相同密钥(如AES)。
    • 非对称加密:加密和解密使用不同密钥(公钥加密,私钥解密,如RSA、ECC)。
    • 可逆性:密钥存在时可恢复原始数据。
    • 保密性:确保数据仅对持有密钥的实体可见。

3、签名算法(哈希算法+加密算法的结合)

  • 数学本质:
    • 基于非对称加密。利用私钥加密哈希值生成签名,公钥验证签名。
    • 结合哈希与加密:签名算法本质是哈希+非对称加密的组合。
  • 主要特点:
    • 身份验证:签名的私钥唯一对应签名者。
    • 数据完整性:签名验证确保数据未被篡改。
  • 常见算法:
    • RSA+SHA256结合或ECDSA+SHA256结合算法等。
      简单理解:实际上签名算是哈希算法和加密算法的结合使用。基础还是哈希算法和签名算法。

4、对比

在这里插入图片描述

5、局限性和协作

(1)、局限性

  • 哈希的局限性:
    • 无法保证数据来源(只能验证完整性)。
    • 需结合加密或签名实现身份验证。
  • 加密的局限性:
    • 无法验证数据完整性(加密数据可能被篡改后重新加密)。
    • 需结合哈希或签名确保数据未被篡改。

(2)、协作关系

[1]、哈希与对称加密的结合(数据安全传输)

  • 哈希解决“数据完整性”:(无法逆向)
    • 例如:验证文件是否被篡改时,计算哈希值并对比。
  • 加密解决“数据保密性”:
    • 例如:HTTPS中,数据通过AES加密传输,确保第三方无法窃取。
  • 联合应用:
    • 加密+哈希:在加密数据前先计算哈希值,加密后同时传输密文和哈希值,接收方解密后重新计算哈希进行验证(确保数据未被篡改)。

[2]、哈希与非对称加密的结合(数据签名)

  • 签名 = 哈希 + 非对称加密:
    1. 哈希压缩数据:对明文生成固定长度摘要(如SHA-256)。
    2. 非对称加密签名:用私钥加密哈希值,生成签名。
    3. 公钥验证:接收方用公钥解密签名,对比重新计算的哈希值。
  • 典型流程:
    明文 → 哈希 → 私钥加密(签名) → 传输 → 公钥验证签名 → 对比哈希值

6、实际生产中的建议

(1)、仅需完整性验证:

  • 选择哈希算法(如SHA-256),例如文件校验、密码存储。

(2)、需保密性:

  • 对称加密(AES)用于大数据,非对称加密(RSA)用于密钥交换。

(3)、需身份验证与不可否认性:

  • 签名算法(ECDSA、RSA签名)结合哈希,例如数字证书、区块链交易。

逆风翻盘,Dare To Be!!!

http://www.dtcms.com/a/122696.html

相关文章:

  • 蓝桥杯 B3620 x 进制转 10 进制
  • 【蓝桥杯】15届JAVA研究生组F回文字符串
  • STM32单片机入门学习——第29节: [9-5] 串口收发HEX数据包串口收发文本数据包
  • C++设计模式+异常处理
  • 21 天 Python 计划:MySQL 数据库初识
  • LangChain使用大语言模型构建强大的应用程序
  • 开源模型应用落地-模型上下文协议(MCP)-从数据孤岛到万物互联(一)
  • Linux 实时查看 CUDA 显卡的使用情况命令
  • 基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划|文献速递-深度学习医疗AI最新文献
  • 【Linux】Linux 操作系统 - 03 ,初步指令结尾 + shell 理解
  • Qt中的信号与槽及其自定义
  • mysql Creating sort index
  • 博物馆小程序怎么做?从0到1打造数字化文化窗口
  • openEuler欧拉系统配置local的yum源
  • 蓝桥杯-蓝桥幼儿园(Java-并查集)
  • 【KWDB 创作者计划】_KWDB:开源引领数据库创新变革
  • 多图超详细:Docker安装知识库AI客服RAGFlow的详细步骤、使用教程及注意事项:
  • Vue接口平台学习五——测试环境页面
  • 关于量化交易在拉盘砸盘方面应用的部分思考
  • HTML 是什么?网页创建的核心标记语言
  • 如何开发英语在线训练小程序:从0到1的详细步骤
  • spring-cloud-starter-alibaba-seata使用说明
  • C++ RAII 的用途及业务代码实现案例
  • 20周年系列|美创科技再度入围「年度高成长企业」系列榜单
  • 鸿蒙NEXT开发Preferences工具类(ArkTs)
  • Python生成器与列表的对照使用详解
  • 2025高教社杯全国大学生数学建模竞赛——5个月备赛规划
  • Spring Boot 启动后自动执行 Service 方法终极指南
  • 正则表达式补充——python
  • leetcode_707. 设计链表_java