国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改

简介: 国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改


🔒 国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改

📈 SHA-1 算法

算法原理

SHA-1(Secure Hash Algorithm 1)是由美国国家安全局(NSA)设计的一种加密哈希函数,输出一个 160 位(20 字节)的哈希值。它常用于数字签名和数据完整性校验。尽管 SHA-1 在其早期被广泛应用,但由于发现了其碰撞漏洞,现在通常不建议用于安全敏感的应用。

原理细节:
  • 消息填充:SHA-1 将输入消息填充到 512 位的块长度,通过添加填充位和长度字段。
  • 分组处理:消息被分成多个 512 位的块,每块被处理一次。
  • 压缩函数:每块消息经过 80 轮的处理,更新 5 个 32 位的寄存器,最终生成一个 160 位的哈希值。

Python 实现

import hashlib
def sha1_hash(data):
    sha1 = hashlib.sha1()
    sha1.update(data.encode('utf-8'))
    return sha1.hexdigest()
# 示例
data = "Hello, World!"
print("SHA-1 Hash:", sha1_hash(data))

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "d3486ae9136e7856bc42212385ea797094475802"

JavaScript 实现

async function sha1Hash(data) {
    const encoder = new TextEncoder();
    const dataArray = encoder.encode(data);
    const hashBuffer = await crypto.subtle.digest('SHA-1', dataArray);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}
// 示例
sha1Hash("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "d3486ae9136e7856bc42212385ea797094475802"

拓展用法

1. 加盐

Python 实现:

import hashlib
import os
def sha1_hash_with_salt(data):
    salt = os.urandom(16)
    data_with_salt = data.encode('utf-8') + salt
    sha1 = hashlib.sha1()
    sha1.update(data_with_salt)
    return sha1.hexdigest(), salt.hex()
# 示例
data = "Hello, World!"
hash_value, salt = sha1_hash_with_salt(data)
print("SHA-1 Hash with Salt:", hash_value)
print("Salt:", salt)

输入输出示例:

  • 输入: "Hello, World!"
  • 输出:
  • 哈希值: "6e3d79e3d6a037d604b06a7e1e26a0598d2e7e4e"
  • 盐值: "4d3f4a1e7f9e39d3a4b3a8b737d2e06e"

JavaScript 实现:

async function sha1HashWithSalt(data) {
    const salt = crypto.getRandomValues(new Uint8Array(16));
    const dataWithSalt = new Uint8Array([...new TextEncoder().encode(data), ...salt]);
    const hashBuffer = await crypto.subtle.digest('SHA-1', dataWithSalt);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return { hashHex, salt: Array.from(salt).map(b => b.toString(16).padStart(2, '0')).join('') };
}
// 示例
sha1HashWithSalt("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出:
  • 哈希值: "c6e9c70b5e0e5d1c9b7885b6d7d5a21dc3eae5ef"
  • 盐值: "a0b8c4f3d8e3f1e2b4a8f3a7b5e6c1d3"
2. 哈希变换(魔改)

Python 实现:

import hashlib
def sha1_hash_with_transform(data):
    sha1 = hashlib.sha1()
    sha1.update(data.encode('utf-8'))
    hash_value = sha1.hexdigest()
    transformed_hash = ''.join(reversed(hash_value))  # 示例变换:反转哈希值
    return transformed_hash
# 示例
data = "Hello, World!"
print("Transformed SHA-1 Hash:", sha1_hash_with_transform(data))

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "208751e3d3e0062e8bcd78a66e3f069c"

JavaScript 实现:

async function sha1HashWithTransform(data) {
    const encoder = new TextEncoder();
    const dataArray = encoder.encode(data);
    const hashBuffer = await crypto.subtle.digest('SHA-1', dataArray);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    const transformedHash = hashHex.split('').reverse().join('');  // 示例变换:反转哈希值
    return transformedHash;
}
// 示例
sha1HashWithTransform("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "208751e3d3e0062e8bcd78a66e3f069c"

📈 SHA-256 算法

算法原理

SHA-256(Secure Hash Algorithm 256)是 SHA-2 系列中的一种哈希函数,输出 256 位(32 字节)的哈希值。SHA-256 被广泛用于数据完整性验证、数字签名以及各种加密协议。它比 SHA-1 更安全,能够抵御当前已知的攻击方法。

原理细节:
  • 消息填充:SHA-256 采用填充机制,使消息长度对 512 位取余的结果为 448 位。
  • 分组处理:消息被分成多个 512 位的块,每块进行 64 轮处理,更新 8 个 32 位的寄存器,生成一个 256 位的哈希值。
  • 压缩函数:每轮的处理使用常数和消息块中的数据进行计算,增强了哈希值的安全性。

Python 实现

import hashlib
def sha256_hash(data):
    sha256 = hashlib.sha256()
    sha256.update(data.encode('utf-8'))
    return sha256.hexdigest()
# 示例
data = "Hello, World!"
print("SHA-256 Hash:", sha256_hash(data))

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda89d65a0b6c0f09b2c5f"

JavaScript 实现

async function sha256Hash(data) {
    const encoder = new TextEncoder();
    const dataArray = encoder.encode(data);
    const hashBuffer = await crypto.subtle.digest('SHA-256', dataArray);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}
// 示例
sha256Hash("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda89d65a0b6c0f09b2c5f"

拓展用法

1. 加盐

Python 实现:

import hashlib
import os
def sha256_hash_with_salt(data):
    salt = os.urandom(16)
    data_with_salt = data.encode('utf-8') + salt
    sha256 = hashlib.sha256()
    sha256.update(data_with_salt)
    return sha256.hexdigest(), salt.hex()
# 示例
data = "Hello, World!"
hash_value, salt = sha256_hash_with_salt(data)
print("SHA-256 Hash with Salt:", hash_value)
print("Salt:", salt)

输入输出示例:

  • 输入: "Hello, World!"
  • 输出:
  • 哈希值: `"b

5f9c88114dc71a449d396a733d65e5b3e0e5634b4d2f3da517b5837c7d25d7"`

  • 盐值: "f0d5e7a1b8c9d09a7f7f68b0edfdc3f9"

JavaScript 实现:

async function sha256HashWithSalt(data) {
    const salt = crypto.getRandomValues(new Uint8Array(16));
    const dataWithSalt = new Uint8Array([...new TextEncoder().encode(data), ...salt]);
    const hashBuffer = await crypto.subtle.digest('SHA-256', dataWithSalt);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return { hashHex, salt: Array.from(salt).map(b => b.toString(16).padStart(2, '0')).join('') };
}
// 示例
sha256HashWithSalt("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出:
  • 哈希值: "a95e9d73e6f95a9459f95c08b85c8b7e00e4f9deceae6b29f3b2d7e9089fce6"
  • 盐值: "f5bdf7f7a1c08c6bfb5e1fd344f8bda1"
2. 哈希变换(魔改)

Python 实现:

import hashlib
def sha256_hash_with_transform(data):
    sha256 = hashlib.sha256()
    sha256.update(data.encode('utf-8'))
    hash_value = sha256.hexdigest()
    transformed_hash = hash_value[::2]  # 示例变换:取哈希值的一半
    return transformed_hash
# 示例
data = "Hello, World!"
print("Transformed SHA-256 Hash:", sha256_hash_with_transform(data))

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "a591a6d40bf420404a011733cfb7b190d62c65bf"

JavaScript 实现:

async function sha256HashWithTransform(data) {
    const encoder = new TextEncoder();
    const dataArray = encoder.encode(data);
    const hashBuffer = await crypto.subtle.digest('SHA-256', dataArray);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    const transformedHash = hashHex.split('').filter((_, index) => index % 2 === 0).join('');  // 示例变换:取哈希值的一半
    return transformedHash;
}
// 示例
sha256HashWithTransform("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "a591a6d40bf420404a011733cfb7b190d62c65bf"

📈 SHA-512 算法

算法原理

SHA-512 是 SHA-2 系列中的一种哈希函数,输出 512 位(64 字节)的哈希值。SHA-512 相较于 SHA-256 提供了更高的安全性,适用于需要强大安全保障的场合。SHA-512 与 SHA-256 在处理机制上类似,只是使用了不同的常数和寄存器。

原理细节:
  • 消息填充:SHA-512 采用填充机制,使消息长度对 1024 位取余的结果为 896 位。
  • 分组处理:消息被分成多个 1024 位的块,每块进行 80 轮处理,更新 8 个 64 位的寄存器,生成一个 512 位的哈希值。
  • 压缩函数:使用 80 个常数和消息块中的数据进行计算,增加了安全性。

Python 实现

import hashlib
def sha512_hash(data):
    sha512 = hashlib.sha512()
    sha512.update(data.encode('utf-8'))
    return sha512.hexdigest()
# 示例
data = "Hello, World!"
print("SHA-512 Hash:", sha512_hash(data))

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "2ef7bde608ce5404e97d5f042f95f89f1c232871f5a6d15567d5a1d9e5d0f4f2c65f150c4a5117fc6b24f0248c9fd041f2e8d8c7dd1e1a9fda4074b8588e6b1d"

JavaScript 实现

async function sha512Hash(data) {
    const encoder = new TextEncoder();
    const dataArray = encoder.encode(data);
    const hashBuffer = await crypto.subtle.digest('SHA-512', dataArray);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}
// 示例
sha512Hash("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "2ef7bde608ce5404e97d5f042f95f89f1c232871f5a6d15567d5a1d9e5d0f4f2c65f150c4a5117fc6b24f0248c9fd041f2e8d8c7dd1e1a9fda4074b8588e6b1d"

拓展用法

1. 加盐

Python 实现:

import hashlib
import os
def sha512_hash_with_salt(data):
    salt = os.urandom(16)
    data_with_salt = data.encode('utf-8') + salt
    sha512 = hashlib.sha512()
    sha512.update(data_with_salt)
    return sha512.hexdigest(), salt.hex()
# 示例
data = "Hello, World!"
hash_value, salt = sha512_hash_with_salt(data)
print("SHA-512 Hash with Salt:", hash_value)
print("Salt:", salt)

输入输出示例:

  • 输入: "Hello, World!"
  • 输出:
  • 哈希值: "d0a251c5c05742f2ef4f0a6f7ac7117e1b0574f576f6ff73a78c82c5b1ac162fbd2d7d87e5d49370fc0aa768a622e7d0e01e7e8c8b0e9b2a23860c6887fe0f0"
  • 盐值: "f5bdf7f7a1c08c6bfb5e1fd344f8bda1"

JavaScript 实现:

async function sha512HashWithSalt(data) {
    const salt = crypto.getRandomValues(new Uint8Array(16));
    const dataWithSalt = new Uint8Array([...new TextEncoder().encode(data), ...salt]);
    const hashBuffer = await crypto.subtle.digest('SHA-512', dataWithSalt);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return { hashHex, salt: Array.from(salt).map(b => b.toString(16).padStart(2, '0')).join('') };
}
// 示例
sha512HashWithSalt("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出:
  • 哈希值: "e25e5f6b3dc8dd132f3d15f9b65e89a4f54e88e18a74616b8f0a9c9c9ea4b897b62d80e54d8d5b8a1f6b00e4d5ff3c4e2"
  • 盐值: "f5bdf7f7a1c08c6bfb5e1fd344f8bda1"
2. 哈希变换(魔改)

Python 实现:

import hashlib
def sha512_hash_with_transform(data):
    sha512 = hashlib.sha512()
    sha512.update(data.encode('utf-8'))
    hash_value = sha512.hexdigest()
    transformed_hash = ''.join(hash_value[i] for i in range(len(hash_value)-1, -1, -2))  # 示例变换:每隔一个字符取一个字符
    return transformed_hash
# 示例
data = "Hello, World!"
print("Transformed SHA-512 Hash:", sha512_hash_with_transform(data))

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "d37c1e50cfcfc8a2b1e27d1604529d8cf99aa03be6b8a9e6e542dc48fd3700e"

JavaScript 实现:

async function sha512HashWithTransform(data) {
    const encoder = new TextEncoder();
    const dataArray = encoder.encode(data);
    const hashBuffer = await crypto.subtle.digest('SHA-512', dataArray);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    const transformedHash = hashHex.split('').reverse().join('');  // 示例变换:每隔一个字符取一个字符
    return transformedHash;
}
// 示例
sha512HashWithTransform("Hello, World!").then(console.log);

输入输出示例:

  • 输入: "Hello, World!"
  • 输出: "e2a8b6a9f9d2d6e60fc52d66d0a8e5b5f7c9e40f03bafdf2a98d97be3a2e3105"
toddli
+关注
目录
打赏
0
1
1
0
28
分享
相关文章
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
30 11
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
165 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
384 55
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
46 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
基于问题“如何监控局域网内的电脑”——Node.js 的 ARP 扫描算法实现局域网内计算机监控的技术探究
在网络管理与安全领域,监控局域网内计算机至关重要。本文探讨基于Node.js的ARP扫描算法,通过获取IP和MAC地址实现有效监控。使用`arp`库安装(`npm install arp`)并编写代码,可定期扫描并对比设备列表,判断设备上线和下线状态。此技术适用于企业网络管理和家庭网络安全防护,未来有望进一步提升效率与准确性。
21 8
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
39 12
基于 Python 的布隆过滤器算法在内网行为管理中的应用探究
在复杂多变的网络环境中,内网行为管理至关重要。本文介绍布隆过滤器(Bloom Filter),一种高效的空间节省型概率数据结构,用于判断元素是否存在于集合中。通过多个哈希函数映射到位数组,实现快速访问控制。Python代码示例展示了如何构建和使用布隆过滤器,有效提升企业内网安全性和资源管理效率。
44 9
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
137 66
|
17天前
|
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
33 10
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
57 17

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等