IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> SHA-1的数据填充与扩展实验-Python -> 正文阅读

[Python知识库]SHA-1的数据填充与扩展实验-Python

这次来展示下,SHA-1中的数据填充与扩展的Python代码实现!!!

首先是将输入的数据进行转换,转换为二进制数,转化的过程如下:

输入的消息 -> 转化为相应的ASCII码 -> 再由ASCII转换为二进制

在SHA-1中,最后的64比特位是来表示数据的长度,所以SHA-1可以检测的长度为2的64次方减去1,这个数字还是很大的。以512比特为一组数据,剩下不足512比特的需要进行补足,并且在末尾的64比特来表示数据的长度。

1.数据转化

这里推荐使用format(news,'b')这个函数来转化,其中的'b'表示转换为二进制,'x'可以转化为十六进制,一是可以直接转化为相应的进制,二是可以省去前面的进制头部如0b,0x等,可以省去一些不必要的步骤,缩短代码。

#news = input("输入消息:")
news = "abc"
#############################################

asc = []
for i in news:#每个字符的ASCII码转二进制
    asc.append(format(ord(i),'b').zfill(8))
news_len = 8 * len(asc)#消息完整长度
lenth = (8 * len(asc)) % 512#消息长度
asc = "".join(asc)#消息
filling = "1" + (447 - lenth) * "0"#附加位元
supplyment = format(news_len,'b').zfill(64)#消息长度
whole = asc + filling + supplyment#完整512比特

#############################################

代码里lenth = (8 * len(asc) ) % 512用来判断数据的长度是否超过了完整的512比特,如果超过,就对超过的部分进行补足,这里的数据量小,就不进行多余操作了。

2.数据扩展

group = []
for i in range(0,len(whole),32):
    num = format(eval("0b"+whole[i:i+32]),'x').zfill(8)
    group.append("0x"+num)
def leftround_207206(num):#左移一位
    return num[1:] + num[0]
def data_expand_207206(group):#数据扩展
    t = len(group)
    initial = eval(group[t - 16]) ^ eval(group[t - 14]) ^ eval(group[t - 8]) ^ eval(group[t - 3])
    xor = leftround_207206(format(initial, 'b').zfill(32))
    result = "0x" + format(eval("0b" + xor), 'x').zfill(8)
    group.append(result)
    result = group
    return result
for i in range(16,80):#
    expand = data_expand_207206(group)
    group = expand
#############################################
from time import *
for i in range(len(group)):
    #sleep(1)
    print(f'W{i}:{group[i]}')

将数据以32比特位为一组输入进空列表group,数据扩展定义为一个函数实现,进行循环得到W16至W79.

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 15:53:53  更:2021-12-14 15:56:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:52:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码