亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python移位運算的實現

系統 1937 0

密碼算法程序設計實踐選的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

填充消息結束。


          

數學真的太神奇了!!(摸了摸涼涼的頭頂

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品国产免费观看一区 | 国产美女在线观看 | 日本一级在线播放线观看视频 | 国产成人免费在线 | 久久精品视频日本 | 特大一级aaaaa毛片 | 精品视频一区二区三区在线播放 | 日韩亚洲欧美在线爱色 | 亚洲精品中文一区不卡 | 深夜免费在线观看 | 日本不卡免费新一区二区三区 | 色综合久久中文字幕综合网 | 天天做天天爰夜夜爽 | 日韩美毛片 | 亚洲一二区视频 | 欧美精品久久久久久久久大尺度 | 看黄色免费网站 | 手机看片国产 | 欧美色亚洲 | 国产美女视频免费 | 中文字幕免费视频 | free性欧美video69 | 欧美成人手机在线视频 | 亚洲va在线va天堂va手机 | 国产精品国产三级国快看 | 九七影院97影院理论片 | 久久是免费只精品热在线 | 亚洲免费精品 | 日本大片久久久高清免费看 | 豆国产97在线 | 中国 | 久久99热久久精品23 | 久久精品精品 | 国产精品美女视频 | 综合久久99久久99播放 | 国产高清不卡一区二区 | 亚洲欧美日韩人成 | 免费国内精品久久久久影院 | 色综合久久久久久久 | 97视频在线观看免费视频 | 亚洲视频中文字幕在线 | 91在线观 |