最常見加密方式和Python實現 入門篇)

2021-09-26 05:53:35 字數 3978 閱讀 6740

前言

我們所說的加密方式,都是對二進位制編碼的格式進行加密的,對應到python中,則是我們的bytes。

所以當我們在python中進行加密操作的時候,要確保我們操作的是bytes,否則就會報錯。

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

# 方法中不傳引數則是以預設的utf-8編碼進行轉換in [1]: '南

北'.encode(

)out[1]

: b'\\xe5\\x8d\\x97\\xe5\\x8c\\x97'in [2]

: b'\\xe5\\x8d\\x97\\xe5\\x8c\\x97'

.decode(

)out[2]

: '南

北'

注:兩位十六進製制常常用來顯示乙個二進位制位元組。

利用binascii模組可以將十六進製制顯示的位元組轉換成我們在加解密中更常用的顯示方式:

in [1]

:from urllib import parse# quote()方法會自動將

str轉換成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編碼

簡述base64是一種用64個字元來表示任意二進位制資料的方法。

base64編碼可以成為密碼學的基石。可以將任意的二進位制資料進行base64編碼。所有的資料都能被編碼為並只用65個字元就能表示的文字檔案。( 65字元:a~z a~z 0~9 + / = )編碼後的資料~=編碼前資料的4/3,會大1/3左右。

base64編碼的原理

將所有字元轉化為ascii碼。

將ascii碼轉化為8位二進位制 。

將二進位制3個歸成一組(不足3個在後邊補0)共24位,再拆分 4組,每組6位。

統一在6位二進位制前補兩個0湊足8位。

將補0後的二進位制轉為十進位制。

從base64編碼表獲取十進位制對應的base64編碼。

base64編碼的說明

轉換的時候,將三個byte的資料,先後放入乙個24bit的緩衝區中,先來的byte佔高位。

資料不足3byte的話,於緩衝區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字元作為編碼後的輸出。

不斷進行,直到全部輸入資料轉換完成。

如果最後剩下兩個輸入資料,在編碼結果後加1個「=」。

如果最後剩下乙個輸入資料,編碼結果後加2個「=」。

如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。

python的base64使用

python內建的base64模組可以直接進行base64的編譯碼

注意:用於base64編碼的,要麼是ascii包含的字元,要麼是二進位制資料

in [1]

:import base64in [2]

: base64.b64encode(b'hello

world')out[2]: b'a**sbg8gd29ybgq='in [3]

: base64.b64decode(b'a**sbg8gd29ybgq='

)out[3]

: b'hello

world'

md5(資訊-摘要演算法)

簡述message-digest algorithm 5(資訊-摘要演算法)。經常說的「md5加密」,就是它資訊-摘要演算法。

md5,其實就是一種演算法。可以將乙個字串,或檔案,或壓縮包,執行md5後,就可以生成乙個固定長度為128bit的串。這個串,基本上是唯一的。

不可逆性

每個人都有不同的指紋,看到這個人,可以得出他的指紋等資訊,並且唯一對應,但你只看乙個指紋,是不可能看到或讀到這個人的長相或身份等資訊。

特點壓縮性:任意長度的資料,算出的md5值長度都是固定的。

容易計算:從原資料計算出md5值很容易。

抗修改性:對原資料進行任何改動,哪怕只修改1個位元組,所得到的md5值都有很大區別。

強抗碰撞:已知原資料和其md5值,想找到乙個具有相同*md5值的資料(即偽造資料)是非常困難的。

舉個栗子:世界上只有乙個我,但是姑娘卻是非常非常多的,以乙個有限的我對幾乎是無限的姑娘,所以可能能搞定非常多(100+)的妞,這個理論上的確是通的,可是實際情況下…

python的md5使用

由於md5模組在python3中被移除,在python3中使用hashlib模組進行md5操作

import hashlib# 待加密資訊str = '這是乙個測試'# 建立md5物件hl 

= hashlib.md5(

)# 此處必須宣告encode# 若寫法為

hl.update(

str) 報錯為: unicode-objects must be encoded

before hashinghl.update(

str.encode(encoding='utf-

8'))print('md5加密前為 :' + str)print('md5加密後為 :' + hl.hexdigest(

))

執行結果

md5加密前為 :這是乙個測試md5加密後為 :cfca700b9e09cf664f3ae80733274d9f

md5長度

md5的長度,預設為128bit,也就是128個0和1的二進位制串。這樣表達是很不友好的。所以將二進位制轉成了16進製制,每4個bit表示乙個16進製制,所以128/4 = 32 換成16進製表示後,為32位了。

為什麼網上還有md5是16位的呢?

其實16位的長度,是從32位md5值來的。是將32位md5去掉前八位,去掉後八位得到的。

python加密庫pycryptodome

pycrypto是 python 中密碼學方面最有名的第三方軟體包。可惜的是,它的開發工作於2023年就已停止。

幸運的是,有乙個該項目的分支pycrytodome 取代了 pycrypto 。

安裝之前需要先安裝microsoft visual c++ 2015。

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

pip install pycryptodome

如果你依然在程式設計的世界裡迷茫,

不知道自己的未來規劃,

對python感興趣,

這裡推薦一下我的學習交流圈qq群:895 797 751,

裡面都是學習python的,

匯入:

import crypto

在windows 系統上安裝則稍有不同:

pip install pycryptodomex

匯入:

import cryptodome

簡介

des演算法為密碼體制中的對稱密碼體制,又被稱為美國資料加密標準。

des是乙個分組加密演算法,典型的des以64位為分組對資料加密,加密和解密用的是同乙個演算法。

des演算法的入口引數有三個:key、data、mode。其中key為7個位元組共56位,是des演算法的工作金鑰;data為8個位元組64位,是要被加密或被解密的資料;mode為des的工作方式,有兩種:加密或解密。

金鑰長64位,金鑰事實上是56位參與des運算(第8、16、24、32、40、48、56、64位是校驗位,使得每個金鑰都有奇數個1),分組後的明文組和56位的金鑰按位替代或交換的方法形成密文組

加密 常見加密方式

由於在學習jwt的時候會涉及使用很多加密演算法,所以在這裡做下掃盲,簡單了解就可以 加密演算法種類有 解釋 加密後,密文可以反向解密得到密碼原文.4.1.1.對稱加密 檔案加密和解密使用相同的金鑰,即加密金鑰也可以用作解密金鑰 解釋 在對稱加密演算法中,資料發信方將明文和加密金鑰一起經過特殊的加密演...

常見加密方式及Python實現

行者ai 由於計算機軟體的非法複製,通訊的洩密 資料安全受到威脅,所以加密在開發過程中是經常使用到的技術,在一些重要場景中都有所應用,如 登入 支付 oauth等,場景不同需要搭配不一樣的簽名加密演算法來達到業務目標。加密演算法分雜湊演算法 對稱加密 非對稱加密。1 雜湊演算法 經常需要驗證訊息的完...

41 常見的加密方式

1.1 介紹 base64是一種用64個字元來表示任意二進位制資料的方法。base64是一種編碼方式而不是加密演算法。只是看上去像是加密 base64使用a z,a z,0 9,64個字元實現對資料進行加密 1.2 python使用import base64 base64.b64encode b s...