欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python實(shí)現(xiàn)最常見(jiàn)加密方式詳解

系統(tǒng) 1608 0

前言

我們所說(shuō)的加密方式,都是對(duì)二進(jìn)制編碼的格式進(jìn)行加密的,對(duì)應(yīng)到Python中,則是我們的Bytes。

所以當(dāng)我們?cè)赑ython中進(jìn)行加密操作的時(shí)候,要確保我們操作的是Bytes,否則就會(huì)報(bào)錯(cuò)。

將字符串和Bytes互相轉(zhuǎn)換可以使用encode()和decode()方法。如下所示:

            
# 方法中不傳參數(shù)則是以默認(rèn)的utf-8編碼進(jìn)行轉(zhuǎn)換In [1]: '南北'.encode()Out[1]: b'\xe5\x8d\x97\xe5\x8c\x97'In [2]: b'\xe5\x8d\x97\xe5\x8c\x97'.decode()Out[2]: '南北'
          

注:兩位十六進(jìn)制常常用來(lái)顯示一個(gè)二進(jìn)制字節(jié)。

利用binascii模塊可以將十六進(jìn)制顯示的字節(jié)轉(zhuǎn)換成我們?cè)诩咏饷苤懈S玫娘@示方式:

            
In [1]: import binasciiIn [2]: '南北'.encode()Out[2]: b'\xe5\x8d\x97\xe5\x8c\x97'In [3]: binascii.b2a_hex('南北'.encode())Out[3]: b'e58d97e58c97'In [4]: binascii.a2b_hex(b'e58d97e58c97')Out[4]: b'\xe5\x8d\x97\xe5\x8c\x97'In [5]: binascii.a2b_hex(b'e58d97e58c97').decode()Out[5]: '南北'
          

URL編碼

簡(jiǎn)介

正常的URL中是只能包含ASCII字符的,也就是字符、數(shù)字和一些符號(hào)。而URL編碼就是一種瀏覽器用來(lái)避免url中出現(xiàn)特殊字符(如漢字)的編碼方式。

其實(shí)就是將超出ASCII范圍的字符轉(zhuǎn)換成帶%的十六進(jìn)制格式。

Python實(shí)現(xiàn)

            
In [1]: from urllib import parse# quote()方法會(huì)自動(dòng)將str轉(zhuǎn)換成bytes,所以這里傳入str和bytes都可以In [2]: parse.quote('南北')Out[2]: '%E5%8D%97%E5%8C%97'In [3]: parse.unquote('%E5%8D%97%E5%8C%97')Out[3]: '南北'
          

Base64編碼

簡(jiǎn)述

Base64是一種用64個(gè)字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法。

Base64編碼可以成為密碼學(xué)的基石。可以將任意的二進(jìn)制數(shù)據(jù)進(jìn)行Base64編碼。所有的數(shù)據(jù)都能被編碼為并只用65個(gè)字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )編碼后的數(shù)據(jù)~=編碼前數(shù)據(jù)的4/3,會(huì)大1/3左右。

Base64編碼的原理

Python實(shí)現(xiàn)最常見(jiàn)加密方式詳解_第1張圖片

  • 將所有字符轉(zhuǎn)化為ASCII碼。
  • 將ASCII碼轉(zhuǎn)化為8位二進(jìn)制 。
  • 將二進(jìn)制3個(gè)歸成一組(不足3個(gè)在后邊補(bǔ)0)共24位,再拆分成4組,每組6位。
  • 統(tǒng)一在6位二進(jìn)制前補(bǔ)兩個(gè)0湊足8位。
  • 將補(bǔ)0后的二進(jìn)制轉(zhuǎn)為十進(jìn)制。
  • 從Base64編碼表獲取十進(jìn)制對(duì)應(yīng)的Base64編碼。

Base64編碼的說(shuō)明

  • 轉(zhuǎn)換的時(shí)候,將三個(gè)byte的數(shù)據(jù),先后放入一個(gè)24bit的緩沖區(qū)中,先來(lái)的byte占高位。
  • 數(shù)據(jù)不足3byte的話,于緩沖區(qū)中剩下的bit用0補(bǔ)足。然后,每次取出6個(gè)bit,按照其值選擇查表選擇對(duì)應(yīng)的字符作為編碼后的輸出。
  • 不斷進(jìn)行,直到全部輸入數(shù)據(jù)轉(zhuǎn)換完成。
  • 如果最后剩下兩個(gè)輸入數(shù)據(jù),在編碼結(jié)果后加1個(gè)“=”。
  • 如果最后剩下一個(gè)輸入數(shù)據(jù),編碼結(jié)果后加2個(gè)“=”。
  • 如果沒(méi)有剩下任何數(shù)據(jù),就什么都不要加,這樣才可以保證資料還原的正確性。

Python的Base64使用

Python內(nèi)置的base64模塊可以直接進(jìn)行base64的編解碼

注意:用于base64編碼的,要么是ASCII包含的字符,要么是二進(jìn)制數(shù)據(jù)

            
In [1]: import base64In [2]: base64.b64encode(b'hello world')Out[2]: b'aGVsbG8gd29ybGQ='In [3]: base64.b64decode(b'aGVsbG8gd29ybGQ=')Out[3]: b'hello world'
          

MD5(信息-摘要算法)

簡(jiǎn)述

message-digest algorithm 5(信息-摘要算法)。經(jīng)常說(shuō)的“MD5加密”,就是它信息-摘要算法。

md5,其實(shí)就是一種算法。可以將一個(gè)字符串,或文件,或壓縮包,執(zhí)行md5后,就可以生成一個(gè)固定長(zhǎng)度為128bit的串。這個(gè)串,基本上是唯一的。

不可逆性

每個(gè)人都有不同的指紋,看到這個(gè)人,可以得出他的指紋等信息,并且唯一對(duì)應(yīng),但你只看一個(gè)指紋,是不可能看到或讀到這個(gè)人的長(zhǎng)相或身份等信息。

特點(diǎn)

  • 壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的MD5值長(zhǎng)度都是固定的。
  • 容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易。
  • 抗修改性:對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。
  • 強(qiáng)抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。

舉個(gè)栗子:世界上只有一個(gè)我,但是姑娘卻是非常非常多的,以一個(gè)有限的我對(duì)幾乎是無(wú)限的姑娘,所以可能能搞定非常多(100+)的妞,這個(gè)理論上的確是通的,可是實(shí)際情況下....

Python的MD5使用

由于MD5模塊在python3中被移除,在python3中使用hashlib模塊進(jìn)行md5操作

            
import hashlib# 待加密信息str = '這是一個(gè)測(cè)試'# 創(chuàng)建md5對(duì)象hl = hashlib.md5()# 此處必須聲明encode# 若寫(xiě)法為hl.update(str) 報(bào)錯(cuò)為: Unicode-objects must be encoded before hashinghl.update(str.encode(encoding='utf-8'))print('MD5加密前為 :' + str)print('MD5加密后為 :' + hl.hexdigest())
          

運(yùn)行結(jié)果

            
MD5加密前為 :這是一個(gè)測(cè)試MD5加密后為 :cfca700b9e09cf664f3ae80733274d9f
          

MD5長(zhǎng)度

md5的長(zhǎng)度,默認(rèn)為128bit,也就是128個(gè)0和1的二進(jìn)制串。這樣表達(dá)是很不友好的。所以將二進(jìn)制轉(zhuǎn)成了16進(jìn)制,每4個(gè)bit表示一個(gè)16進(jìn)制,所以128/4 = 32 換成16進(jìn)制表示后,為32位了。

為什么網(wǎng)上還有md5是16位的呢?

其實(shí)16位的長(zhǎng)度,是從32位md5值來(lái)的。是將32位md5去掉前八位,去掉后八位得到的。

Python加密庫(kù)PyCryptodome

PyCrypto是 Python 中密碼學(xué)方面最有名的第三方軟件包。可惜的是,它的開(kāi)發(fā)工作于2012年就已停止。

幸運(yùn)的是,有一個(gè)該項(xiàng)目的分支PyCrytodome 取代了 PyCrypto 。

安裝與導(dǎo)入

安裝之前需要先安裝Microsoft Visual c++ 2015。

在Linux上安裝,可以使用以下 pip 命令:

            
pip install pycryptodome
          

導(dǎo)入:

            
import Crypto
          

在Windows 系統(tǒng)上安裝則稍有不同:

            
pip install pycryptodomex
          

導(dǎo)入:

            
import Cryptodome
          

DES

簡(jiǎn)介

DES算法為密碼體制中的對(duì)稱密碼體制,又被稱為美國(guó)數(shù)據(jù)加密標(biāo)準(zhǔn)。

DES是一個(gè)分組加密算法,典型的DES以64位為分組對(duì)數(shù)據(jù)加密,加密和解密用的是同一個(gè)算法。

DES算法的入口參數(shù)有三個(gè):Key、Data、Mode。其中Key為7個(gè)字節(jié)共56位,是DES算法的工作密鑰;Data為8個(gè)字節(jié)64位,是要被加密或被解密的數(shù)據(jù);Mode為DES的工作方式,有兩種:加密或解密。

密鑰長(zhǎng)64位,密鑰事實(shí)上是56位參與DES運(yùn)算(第8、16、24、32、40、48、56、64位是校驗(yàn)位,使得每個(gè)密鑰都有奇數(shù)個(gè)1),分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美三级视频在线播放 | 国产一区亚洲 | 天天草b| 国产精品久久久99 | 激情五月综合婷婷 | 五月婷婷在线观看视频 | 免费高清伧理片午夜伧理片 | 日本免费视频在线观看 | 成人午夜亚洲影视在线观看 | 2019天天操夜夜操 | 黄色在线观看 | 天天摸天天操天天干 | 在线欧美 | 欧美另类69xxxxx免费 | 成人人观看的免费毛片 | 精品欧美一区二区久久久伦 | 亚洲最大福利视频 | 久久国产热视频 | 国产精品久久影院 | 国产午夜精品一区二区三区嫩草 | 波多野一区二区 | 欧美日韩中文视频 | 韩国精品一区 | 久久人人做 | 国产亚洲精品久久久久久线投注 | 亚洲免费观看视频 | 久久成人精品视频 | 久久久久久久亚洲视频 | 成人黄色短视频在线观看 | 高清在线不卡 | 国产午夜精品一区二区三区嫩草 | 波多野结衣一区二区三区88 | 久久久婷 | 黄色视屏免费看 | 亚洲高清在线观看看片 | 欧洲精品一区 | 亚洲区在线 | 色婷婷色综合缴情在线 | 91嫩草国产线免费观看 | 国产精品久久婷婷六月丁香 | 日韩精品在线一区二区 |