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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【SG90模拟舵机控制及PCA9685模块的使用】[通俗易懂]

    【SG90模拟舵机控制及PCA9685模块的使用】[通俗易懂]一.模拟舵机控制1.简介9g模拟舵机在市面上十分常见,价格也比较便宜。可用于航模,机器人或智能小车等。如上图所示,一个舵机有三条线:VCC、GND和信号线。只要通过信号线给予规定的控制信号即可实现舵机码盘的转动。2.控制信号对于此种模拟舵机的控制是通过发送PWM。…

    2025年8月10日
    6
  • tar 打包的时候如何去掉目录前缀

    tar 打包的时候如何去掉目录前缀文章转载自:freefly的博客,对原作者表示感谢。问题:tarczfxx.tgz/xxx/xxx/A然后希望xx.tgz或xx.tar.gz里面就直接A这个目录不希望加前导xxx/xxx,我知道可以先cp这个目录到同一个目录再打包,不过想知道可以不可以不用另外cp到同一个目录 答案1:使用-C指定相对路径,如:tarczfx

    2022年5月6日
    82
  • tp5 上传视频到七牛云

    tp5 上传视频到七牛云

    2021年10月28日
    59
  • LoRaWAN地区参数更新至版本B,新增印度865频段「建议收藏」

    LoRaWAN地区参数更新至版本B,新增印度865频段「建议收藏」LoRaWAN地区参数更新至版本B,新增了印度865频段。这为塔塔通讯近期宣布的20万传感器和基站节点建设计划进行了规范铺路。

    2022年10月21日
    5
  • QStringList 的学习笔记

    QStringList 的学习笔记因公司项目,开始学习QT,这里做一些学习笔记,一遍以后忘记了可以翻阅。笔记内容写的简单,勿怪。参考博客:https://blog.csdn.net/u013360881/article/details/52170487QStringList初始化QStringListqstrList;qstrList&amp;lt;&amp;lt;&quot;Android&quot;&amp;lt;&amp;lt;&quot;Qt

    2022年6月9日
    39
  • mysql主从同步配置读写分离_mysql8做主从数据库

    mysql主从同步配置读写分离_mysql8做主从数据库目录前言1分别在两台centos7系统上安装mysql5.72master主服务器的配置2.1配置文件my.cnf的修改2.2创建从服务器的用户和权限2.3重启mysql服务2.4查看主服务器状态3slave从服务器的配置3.1配置文件my.cnf的修改3.2重启mysql服务3.3连接master主服务器3.4启动slav…

    2022年10月15日
    3

发表回复

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

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