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


相关推荐

  • 彩色图和深度图转点云[通俗易懂]

    彩色图和深度图转点云[通俗易懂]环境:windows10、VS2013、opencv2.49、openNi、PCL1.8opencv环境搭建参考https://www.cnblogs.com/cuteshongshong/p/4057193.htmlhttps://blog.csdn.net/u013105549/article/details/50493069PCL1.8+openNi搭建参考https://blog.cs…

    2022年4月25日
    40
  • Java入门——第一个Java程序HelloWorld(Dos命令窗口)

    Java入门——第一个Java程序HelloWorld(Dos命令窗口)麻烦找一个指定盘符的确切文件位置(尽量不要把要运行的.java文件建在桌面上,因为在Dos命令行中找文件路径比较麻烦!),可以创建一个专门用来练习入门Java程序的文件夹。(比如我这个暂时存放.java文件的文件夹在F盘的Java_WorkBenth文件夹里面)1、第一步,打开Windows资源管理器的查看文件后缀名功能(防止出现xxx.java.txt的文件格式)。2、创建一…

    2022年5月28日
    36
  • 面向对象和面向过程的区别理解_c是面向对象还是面向过程

    面向对象和面向过程的区别理解_c是面向对象还是面向过程一、面向对象和面向过程面向对象面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的,函数本身只

    2022年8月16日
    3
  • 回文子串的个数_统计回文子串的个数

    回文子串的个数_统计回文子串的个数1、题目描述本题要求统计一个字符串中包含多少个回文子串。首先我们来确定子串的概念:一个字符串的子串,就是指它本身的各个部分。如字符串“aba”的子串有“a”、“b”

    2022年10月16日
    1
  • 分布式CAP原理:一致性、可用性、分区容错

    分布式CAP原理:一致性、可用性、分区容错CAP概念单机系统由于所有的处理都在单机完成的,所以不存在数据一致性问题,但是如果系统崩溃了,就导致服务不可用。分布式系统可以实现服务的高可用,现有的大型网站几乎都是分布式的,特别是微服务的出现,使得分布式系统正变得越来越重要。分布式系统最大的难点,就是各个节点的状态如何同步。CAP原理给分布式系统的实现带来了指导思路,它也是理解分布式系统的重要理论。CAP由以下三个指标组成:C(Consistency):一致性A(Availability):可用性P(P…

    2022年7月25日
    4
  • OPENGL—错误调试—无法解析外部符号「建议收藏」

    OPENGL—错误调试—无法解析外部符号「建议收藏」错误1 errorC1060:编译器的堆空间不足c:\programfiles(x86)\microsoftvisualstudio11.0\vc\include\gl\glew.h841 ConsoleApplication8解决方案:#ifdefined(__gl_h_)||defined(__GL_H__)||defined(__X_

    2022年6月28日
    68

发表回复

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

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