python移位运算,python移位运算

python移位运算,python移位运算title:python移位运算date:2018-10-1219:55:22tags:#标签-PYTHONpython移位运算密码算法程序设计实践选的SHA-1。在写的过程中遇到一丢丢关于python移位的问题,记录一下。SHA-1其中第一步需要填充消息。简单阐述一下sha1填充消息的过程:如输入消息“123”,先转成ascii码——313233,消息长度为3*8=24。即001100…

大家好,又见面了,我是你们的朋友全栈君。

title: python移位运算

date: 2018-10-12 19:55:22

tags: #标签

– PYTHON

python移位运算

密码算法程序设计实践选的SHA-1。

在写的过程中遇到一丢丢关于python移位的问题,记录一下。

SHA-1其中第一步需要填充消息。简单阐述一下sha1填充消息的过程:

如输入消息“123”,先转成ascii码——313233,消息长度为3*8=24。

00110001 00110010 00110011

然后填充一个1占1bit,再填充447-24bit个0。

10000000…00000000

最后64bit加上消息长度24的二进制0001 1000

二进制相当于是:

00110001 00110010 00110011 10000000…00000000 00011000

16进制表示

31323380 00000000…0018

python部分代码块:

M = input()

# 1byte=8bit,L为M字符串长度

L = 8 * len(M)

m=0

for ch in M:#遍历字符串M

m = m * (2 ** 8) + ord(ch)

# print(hex(m))#此时16进制的int类型m就是原始数据

#补位,使明文总长度为448(mod512)位

if L < 448:

m = m * 2 + 1 #补位

# 添加填充位

m = m * 2 ** (447 – L)

# 添加长度

m = m * 2 ** 64 + L

不只是python,对于移位运算都有:

左移:

运算规则:

按二进制形式把所有的数字向左移动对应位数,高位移出,低位补零。

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

乘以2**n 相当于向左移动n位数,高位移出0,右边低位的空位补零。

n=128

print(bin(n))

n1=n*2**2+1#1000 0000 00+0000 0001 –>1000 0000 01

print(bin(n1))

n2=n<<2+1

print(bin(n2))

m=8#0000 1000

print(bin(m))

m1=m*2**2+1#0000 1000 00 +0001 00001000 01

print(bin(m1))

m2=m<<2+1

print(bin(m2))

输出结果:0b10000000

0b1000000001

0b10000000000

0b1000

0b100001

0b1000000

Process finished with exit code 0

同理,右移可以用>>或者除以2**n,相当于取商,不要余数。不过有符号区别。

但同时注意运算符优先级的问题,

python中,优先级从高到低分别是:

**,~+-(按位翻转如~1,-1),* / % //,+-(普通加减法),<< >>….

虽然乘以2**n和<

之前sha1填充消息代码过程整理一下如下:

遍历过程:

L=24,m初值=为0

然后m左移8位,此时m不变仍然是00000000

再加上二进制31,此时m=00110001

m再次左移8位,低位补0,此时m=00110001 00000000

再加上二进制32,此时m=00110001 00110010

m再次左移8位,此时m=00110001 00110010 00000000

再加上二进制33,此时m=00110001 00110010 00110011

遍历结束。

补位过程:

如果L<448,即除了最后64bit消息长度,使得明文总长度为512bit。

m先左移1位,低位补0

m=00110001 00110010 00110011 0

补位一个1,m=00110001 00110010 00110011 1

添加填充位:m左移448-1-L长度的值,即447-L=423长度。

m=00110001 00110010 00110011 1000000…00000000(1后有423个0)

添加长度:m左移64bit,即

00110001 00110010 00110011 10000000…00000000

00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000

(1后有423+64个0,此时消息长度总共为24+423+1+64=512bit)

m加上二进制L=24,即00011000。

m=00110001 00110010 00110011 10000000…00000000

00000000 00000000 00000000 00000000 00000000

00000000 00000000 000011000

填充消息结束。

数学真的太神奇了!!(摸了摸凉凉的头顶

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158515.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月13日 下午12:36
下一篇 2022年7月13日 下午12:36


相关推荐

  • [bzoj3884] 上帝与集合的正确用法

    [bzoj3884] 上帝与集合的正确用法

    2022年3月7日
    37
  • QT安装具体图解

    QT安装具体图解文章目录QT安装包下载Qt安装QT安装包下载我下载的版本是最新的5.14.2下载链接在下面,https://download.qt.io/archive/qt/5.14/5.14.2/找到Windows版本下载(ps:如果需要下载其他版本的话点击父目录就可以去选择不同版本了,建议5.9以上。)(ps:Linux上的Qt安装日后会更新,见谅)Qt安装1.双击下载好的安装包,出现界面点击next2.根据个人情况选择填写信息,有账号就登陆,没有就注册一个(注意:注册时候的密码需要英文大写,

    2022年5月17日
    50
  • Windows访问Ubuntu远程桌面

    Windows访问Ubuntu远程桌面步骤 1 在 Ubuntu 系统中允许远程登录打开启动器左上角的程序搜索器 输入 远程 单击桌面共享 按照下图进行配置 这里为了方便没有选择输密码 也可以加入密码 关闭后在桌面右上角会显示远程图标 系统设置 gt 用户账户 解锁 打开自动登录 步骤 2 安装远程桌面组件打开终端运行命令 sudoapt getinstallxr getupdate 步骤 3 修改远程加密选项

    2026年3月19日
    2
  • Win10安装Ubuntu子系统及图形化界面详细教程

    Win10安装Ubuntu子系统及图形化界面详细教程在准备进行安装之前 推荐 C 盘上至少有 5G 的空余空间 1win10 设置打开两个设置 1 开发人员模式 2 启用子系统功能 2 安装打开 MicrosoftSto 搜索 Ubuntu 出现如下界面 选择我红框框出来的两个版本 不要选第一个 那个有坑 安装速度还是挺快的 安装完了之后会在开始菜单出现 linux 的 bash 打开之后还需要继续安装一小会

    2026年3月19日
    2
  • 运维面试官喜欢问的问题是_运维是什么意思

    运维面试官喜欢问的问题是_运维是什么意思你最大的缺点是什么?行为问题(behaviouralquestion),这类问题目的是看性格是否合适公司文化。主要考察:①你是否真心想做这个工作;②你性格与企业文化是否相符。所有答案都应该围绕这两点组织,即每个经历都应回归到你通过这个经历学到什么该职位所需关键技巧,这些经历为何让你想做这个工作,和该经历体现出你什么样的个人风格。你最大的缺点是什么:①避免避重就轻,谈一个算不得缺点的缺点,这…

    2025年8月27日
    7
  • 产品大神有张小龙,为什么运营少有大神?

    产品大神有张小龙,为什么运营少有大神?nbsp nbsp 在互联网产品领域 我们经常会说到缔造微信的张小龙 称之为产品大神 也会经常谈起孕育贴吧的俞军 打造的马化腾 也会对雷军 周鸿祎 傅盛等优秀产品的 CEO 在一些产品上的洞见津津乐道 但当我们回头看运营领域 却发现很少有行业里普遍公认的知名大神 这是为什么呢 昨天发预告后有用户回复 说我是运营大神 那真是太抬举我了 我肯定不是 就是偶尔被称为运营大咖 运营大牛都都如履薄冰 因为距离

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号