亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python移位運(yùn)算的實(shí)現(xiàn)

 更新時(shí)間:2019年07月15日 10:17:03   作者:薛定諤的呱  
這篇文章主要介紹了python移位運(yùn)算的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

密碼算法程序設(shè)計(jì)實(shí)踐選的SHA-1。

在寫的過程中遇到一丟丟關(guān)于python移位的問題,記錄一下。

SHA-1其中第一步需要填充消息。簡(jiǎn)單闡述一下sha1填充消息的過程:

如輸入消息“123”,先轉(zhuǎn)成ascii碼——313233,消息長(zhǎng)度為3*8=24。

即00110001 00110010 00110011

然后填充一個(gè)1占1bit,再填充447-24bit個(gè)0。

10000000...00000000

最后64bit加上消息長(zhǎng)度24的二進(jìn)制0001 1000

二進(jìn)制相當(dāng)于是:

00110001 00110010 00110011 10000000...00000000 00011000

16進(jìn)制表示

31323380 00000000...0018

python部分代碼塊:

    M = input()
    # 1byte=8bit,L為M字符串長(zhǎng)度
    L = 8 * len(M)
    m=0
    for ch in M:#遍歷字符串M
      m = m * (2 ** 8) + ord(ch)
     #  print(hex(m))#此時(shí)16進(jìn)制的int類型m就是原始數(shù)據(jù)

  #補(bǔ)位,使明文總長(zhǎng)度為448(mod512)位
    if L < 448:
      m = m * 2 + 1 #補(bǔ)位
      # 添加填充位
      m = m * 2 ** (447 - L)
      # 添加長(zhǎng)度
      m = m * 2 ** 64 + L

不只是python,對(duì)于移位運(yùn)算都有:

左移:

運(yùn)算規(guī)則:

按二進(jìn)制形式把所有的數(shù)字向左移動(dòng)對(duì)應(yīng)位數(shù),高位移出,低位補(bǔ)零。

在數(shù)字沒有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方。

乘以2**n 相當(dāng)于向左移動(dòng)n位數(shù),高位移出0,右邊低位的空位補(bǔ)零。

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))

輸出結(jié)果:0b10000000
0b1000000001
0b10000000000
0b1000
0b100001
0b1000000

Process finished with exit code 0

同理,右移可以用>>或者除以2**n,相當(dāng)于取商,不要余數(shù)。不過有符號(hào)區(qū)別。

但同時(shí)注意運(yùn)算符優(yōu)先級(jí)的問題,

python中,優(yōu)先級(jí)從高到低分別是:

**,~+-(按位翻轉(zhuǎn)如~1,-1),* / % //,+-(普通加減法),<< >>....

雖然乘以2**n和<<效果一樣,但是在運(yùn)算中可能因?yàn)檫\(yùn)算優(yōu)先級(jí)的問題導(dǎo)致運(yùn)算結(jié)果不同。

之前sha1填充消息代碼過程整理一下如下:

遍歷過程:

L=24,m初值=為0
然后m左移8位,此時(shí)m不變?nèi)匀皇?0000000
再加上二進(jìn)制31,此時(shí)m=00110001
m再次左移8位,低位補(bǔ)0,此時(shí)m=00110001 00000000
再加上二進(jìn)制32,此時(shí)m=00110001 00110010
m再次左移8位,此時(shí)m=00110001 00110010 00000000
再加上二進(jìn)制33,此時(shí)m=00110001 00110010 00110011
遍歷結(jié)束。

補(bǔ)位過程:

如果L<448,即除了最后64bit消息長(zhǎng)度,使得明文總長(zhǎng)度為512bit。
m先左移1位,低位補(bǔ)0
m=00110001 00110010 00110011 0
補(bǔ)位一個(gè)1,m=00110001 00110010 00110011 1

添加填充位:m左移448-1-L長(zhǎng)度的值,即447-L=423長(zhǎng)度。
m=00110001 00110010 00110011 1000000...00000000(1后有423個(gè)0)

添加長(zhǎng)度:m左移64bit,即
00110001 00110010 00110011 10000000...00000000
00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000
(1后有423+64個(gè)0,此時(shí)消息長(zhǎng)度總共為24+423+1+64=512bit)
m加上二進(jìn)制L=24,即00011000。
m=00110001 00110010 00110011 10000000...00000000
00000000 00000000 00000000 00000000 00000000
00000000 00000000 000011000

填充消息結(jié)束。

數(shù)學(xué)真的太神奇了?。。嗣鰶龅念^頂

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于python中theano庫的線性回歸

    基于python中theano庫的線性回歸

    這篇文章主要為大家詳細(xì)介紹了基于python中theano庫的線性回歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 利用Python實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到

    利用Python實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到

    小五收藏了一些論壇網(wǎng)站,經(jīng)常需要自己登錄簽到,以此來獲得積分金幣等等。但天天手動(dòng)太容易忘了這件事啦。畢竟我們都會(huì)用python了,那就可以使用Selenium操作,接下來就和大家講講如何利用Python實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到
    2022-08-08
  • Python實(shí)現(xiàn)批量圖片去重

    Python實(shí)現(xiàn)批量圖片去重

    在日常辦公的時(shí)候,我們經(jīng)常需要對(duì)圖片進(jìn)行去重后保存,如果一張張進(jìn)行尋找將會(huì)非常的耗時(shí),下面我們就來看看如何使用Python實(shí)現(xiàn)批量圖片去重吧
    2024-11-11
  • Python實(shí)現(xiàn)隨機(jī)爬山算法

    Python實(shí)現(xiàn)隨機(jī)爬山算法

    這篇文章主要介紹了Python實(shí)現(xiàn)隨機(jī)爬山算法的方法,幫助大家更好的利用python進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下
    2021-01-01
  • python中l(wèi)ist循環(huán)語句用法實(shí)例

    python中l(wèi)ist循環(huán)語句用法實(shí)例

    這篇文章主要介紹了python中l(wèi)ist循環(huán)語句用法,以實(shí)例形式詳細(xì)介紹了Python針對(duì)list的解析,包含各種常見的遍歷操作及原理分析,需要的朋友可以參考下
    2014-11-11
  • 解決PyCharm控制臺(tái)輸出亂碼的問題

    解決PyCharm控制臺(tái)輸出亂碼的問題

    今天小編就為大家分享一篇解決PyCharm控制臺(tái)輸出亂碼的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法

    詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法

    這篇文章主要介紹了詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • pycharm沒有找到manage?repositories按鈕的解決辦法

    pycharm沒有找到manage?repositories按鈕的解決辦法

    這篇文章主要給大家介紹了關(guān)于pycharm沒有找到manage?repositories按鈕的解決辦法,pycharm是用來寫python的可視化代碼軟件,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Python探索之自定義實(shí)現(xiàn)線程池

    Python探索之自定義實(shí)現(xiàn)線程池

    這篇文章主要介紹了Python探索之自定義實(shí)現(xiàn)線程池,使用queue實(shí)現(xiàn)線程池的方法,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Python中的True,False條件判斷實(shí)例分析

    Python中的True,False條件判斷實(shí)例分析

    這篇文章主要介紹了Python中的True,False條件判斷的用法,實(shí)例分析了針對(duì)不同數(shù)據(jù)類型的條件判斷用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01

最新評(píng)論