五分钟搞懂摘要算法

这篇具有很好参考价值的文章主要介绍了五分钟搞懂摘要算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.摘要算法和摘要

1.概述

摘要算法又称哈希算法、散列算法。摘要也称哈希值,表示输入任意长度的数据,都会输出固定长度的数据。通过摘要算法(比如MDS和SHA-1)就可以得到该哈希值。

2.特点

  • 长度固定,结果越长,认为摘要算法越安全* 原始数据不同,生成的摘要一定不同* 单项不可逆### 3、作用

摘要只验证数据的完整性和唯一性,单项不可逆。 哈希值长度都是固定的:MD5输出128bit长度的二进制串,SHA-1输出160bit长度的二进制串。128bit指二进制位数是128。 (8bit=1byte128bit=16byte)。

4、误区

摘要只是用于验证数据完整性和唯一性的,不管原始数据是什么样的,得到的哈希值都是固定长度的,也就是说哈希值并不是原始数据加密后的密文,只是一个验证身份的令牌,所以我们无法通过摘要还原出原始数据,即单向不可逆,所以说摘要算法是加密算法是不严谨的。

二.目前常用的摘要算法

算法

输出长度

MD5

128bit

SHA-1

160bit

SHA-256

256bit

1.MD5

(1)MD5的用途
  • 验证文件完整性* 存储用户口令(比如密码)系统不用存储用户原始口令,而是存储用户原始口令的MD5,系统计算用户输入的原始口令的MD5并与数据存储的MD5进行对比,如果相同,则说明口令正确,反之则说明口令错误。

(2)彩虹表

MD5虽然不可逆,也无法通过摘要还原出原始数据,但不代表一定安全。由于字符串通过MD5计算的摘要是唯一的,那么MD5字典随着时间积累保存越来越多的MD5记录,通过穷举这个字典就可以找到密码。我们把这个字典称为彩虹表。即采用各种Hash算法生成的明文和密文的对照表。

(3)加盐或者base64--防止彩虹表穷举

抵御彩虹表攻击我们不能简单的记录原始口令的MD5值,需要让原始数据变得够长和够复杂。可以通过base64编码方法,对原始数据先进行base64编码,再MD5,即md5(base64(password))。也可以通过加盐的方法,对原始数据额外添加随机数salt,再MD5,即md5(salt+password)。Java代码如下:


public static String md5(String string, String slat) {if (TextUtils.isEmpty(string)) {return "";}MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest((string + slat).getBytes());String result = "";for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) {temp = "0" + temp;}result += temp;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";} 

2.SHA-1

SHA-1算法也是一种哈希算法,输出160bit,它的同类型算法有SHA-256和SHA-512,输出的长度分别是256bit和512bit。SHA-1在Java中使用同MD5类似,Java代码如下:


public static String sha(String string) {if (TextUtils.isEmpty(string)) {return "";}MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("sha-1");byte[] bytes = md5.digest((string ).getBytes());String result = "";for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) {temp = "0" + temp;}result += temp;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";} 

网络安全成长路线图

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成hei客大神,这个方向越往后,需要学习和掌握的东西就会越来越多,以下是学习网络安全需要走的方向:

摘要算法,java,开发语言,网络安全,算法,MD5,Powered by 金山文档
摘要算法,java,开发语言,网络安全,算法,MD5,Powered by 金山文档

# 网络安全学习方法

上面介绍了技术分类和学习路线,这里来谈一下学习方法:

## 视频学习

无论你是去B站或者是油管上面都有很多网络安全的相关视频可以学习,当然如果你还不知道选择那套学习,我这里也整理了一套和上述成长路线图挂钩的视频教程,完整版的视频已经上传至CSDN官方,朋友们如果需要可以点击这个链接免费领取。摘要算法,java,开发语言,网络安全,算法,MD5,Powered by 金山文档网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!文章来源地址https://www.toymoban.com/news/detail-740634.html

到了这里,关于五分钟搞懂摘要算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 5分钟搞懂MySQL - 行转列

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里   MySQL 行转列 ,对经常处理数据的同学们来说,一定是不陌生的,甚至是印象深刻,因为它大概率困扰过你,让你为之一愣~ 但当你看到本文后,这个问题就不在是问题,及时收藏,以后谁再问你这个问

    2023年04月08日
    浏览(23)
  • 系统架构设计专业技能 · 系统安全分析与设计(四)【加解密、数字信封、信息摘要、数字签名、数字书证、网络安全、信息安全】

    点击进入系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 数据加密是 防止未经授权的用户访问敏感信息的手段 ,保障系统的机密性要素。数据加密有对称加密算法和非对称加

    2024年02月12日
    浏览(12)
  • 2分钟彻底搞懂“高内聚,低耦合”

    💗推荐阅读文章💗 🌸 JavaSE系列 🌸👉1️⃣《JavaSE系列教程》 🌺 MySQL系列 🌺👉2️⃣《MySQL系列教程》 🍀 JavaWeb系列 🍀👉3️⃣《JavaWeb系列教程》 🌻 SSM框架系列 🌻👉4️⃣《SSM框架系列教程》 🎉本博客知识点收录于🎉👉🚀《SSM框架系列教程》🚀—✈️01【高内聚

    2024年03月23日
    浏览(17)
  • 3分钟搞懂:JavaScript 和 ECMAScript

    ECMAScript 是 JavaScript 语言的 国际标准 ,JavaScript 是 ECMAScript 的 一种实现 (Adobe ActionScript 和 JScript 同样实现了 ECMAScript)。 ECMAScript 是欧洲计算机制造商协会 ECMA(European Computer Manufacturers Association)发布的浏览器脚本语言标准。它是 262 号标准文件,又叫 ECMA-262。 ECMAScript 定义

    2023年04月22日
    浏览(13)
  • 5分钟搞懂矩阵乘法的本质

    大家好啊,我是董董灿。 很多与深度学习算法相关的面试,面试官可能都会问一类问题,那就是你是如何理解矩阵乘算法的。 更有甚者,会让你当场手写矩阵乘算法,然后问细节,问如何优化,面试现场,残忍至极。 那矩阵乘法的本质到底是什么呢?为什么在神经网络中,

    2024年02月04日
    浏览(28)
  • 5分钟搞懂池化的本质

    大家好啊,我是董董灿! 在很多与计算机视觉相关的神经网络中,我们往往都会看到池化这一算法,它一般跟在卷积层后面。 神经网络中用到最多的池化方式无外乎是最大池化和平均池化。两者运算接近,区别在于是在kernel范围内取最大值还是取平均值来作为池化的输出。

    2024年02月15日
    浏览(10)
  • 3分钟带你彻底搞懂 Kafka

    实时数据处理 ,从名字上看,很好理解,就是将数据进行实时处理,在现在流行的微服务开发中,最常用实时数据处理平台有 RabbitMQ、RocketMQ 等消息中间件。 这些中间件,最大的特点主要有两个: 服务解耦 流量削峰 在早期的 web 应用程序开发中,当请求量突然上来了时候,

    2024年04月16日
    浏览(5)
  • 5分钟搞懂Kubernetes:轻松理解所有组件

    之前我曾经提到了一系列关于服务网格的内容。然而,我意识到有些同学可能对Kubernetes的了解相对较少,更不用说应用服务网格这个概念了。因此,今天我决定带着大家快速理解Kubernetes中的一些专有名词,以便在短时间内入门,并减少学习的时间。我将在接下来的5分钟内为

    2024年02月05日
    浏览(15)
  • 十分钟带汝入门大数据开发语言Scala

    大家好,我是百思不得小赵。 创作时间:2022 年 6 月 7 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀 今天是加入CSDN的第1193天。觉得有帮助麻烦👏点赞、🍀评论、❤️收藏 Scala是一门多范式的编程语言,一种类似Ja

    2024年02月02日
    浏览(14)
  • 10分钟从源码级别搞懂AQS(AbstractQueuedSynchronizer)

    上篇文章15000字、6个代码案例、5个原理图让你彻底搞懂Synchronized有说到synchronized由object monitor实现的 object monitor中由cxq栈和entry list来实现阻塞队列,wait set实现等待队列,从而实现synchronized的等待/通知模式 而JDK中的JUC并发包也通过类似的阻塞队列和等待队列实现等待/通知模

    2024年02月10日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包