欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現最常見加密方式詳解

 更新時間:2019年07月13日 14:31:49   作者:千鋒Python唐唐君  
這篇文章主要介紹了Python實現最常見加密方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

我們所說的加密方式,都是對二進制編碼的格式進行加密的,對應到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]: '南北'

注:兩位十六進制常常用來顯示一個二進制字節(jié)。

利用binascii模塊可以將十六進制顯示的字節(jié)轉換成我們在加解密中更常用的顯示方式:

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編碼

簡介

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

其實就是將超出ASCII范圍的字符轉換成帶%的十六進制格式。

Python實現

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編碼可以成為密碼學的基石??梢詫⑷我獾亩M制數據進行Base64編碼。所有的數據都能被編碼為并只用65個字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )編碼后的數據~=編碼前數據的4/3,會大1/3左右。

Base64編碼的原理


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

Base64編碼的說明

  • 轉換的時候,將三個byte的數據,先后放入一個24bit的緩沖區(qū)中,先來的byte占高位。
  • 數據不足3byte的話,于緩沖區(qū)中剩下的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'aGVsbG8gd29ybGQ='In [3]: base64.b64decode(b'aGVsbG8gd29ybGQ=')Out[3]: b'hello world'

MD5(信息-摘要算法)

簡述

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

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

不可逆性

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

特點

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

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

Python的MD5使用

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

import hashlib# 待加密信息str = '這是一個測試'# 創(chuàng)建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 中密碼學方面最有名的第三方軟件包。可惜的是,它的開發(fā)工作于2012年就已停止。

幸運的是,有一個該項目的分支PyCrytodome 取代了 PyCrypto 。

安裝與導入

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

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

pip install pycryptodome

導入:

import Crypto

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

pip install pycryptodomex

導入:

import Cryptodome

DES

簡介

DES算法為密碼體制中的對稱密碼體制,又被稱為美國數據加密標準。

DES是一個分組加密算法,典型的DES以64位為分組對數據加密,加密和解密用的是同一個算法。

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

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

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

相關文章

  • ubuntu系統(tǒng)下多個python版本如何設置默認python和pip

    ubuntu系統(tǒng)下多個python版本如何設置默認python和pip

    pip是一個用來安裝Python軟件包的工具,下面這篇文章主要給大家介紹了關于ubuntu系統(tǒng)下多個python版本如何設置默認python和pip的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Python中remove漏刪和索引越界問題的解決

    Python中remove漏刪和索引越界問題的解決

    這篇文章主要介紹了Python中remove漏刪和索引越界問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 淺談Python中copy()方法的使用

    淺談Python中copy()方法的使用

    這篇文章主要介紹了淺談Python中copy()方法的使用,Python中的拷貝分為潛拷貝和深拷貝,本文只是簡單介紹用法,需要的朋友可以參考下
    2015-05-05
  • python實現測試工具(一)——命令行發(fā)送get請求

    python實現測試工具(一)——命令行發(fā)送get請求

    這篇文章主要介紹了python如何實現命令行發(fā)送get請求,幫助大家更好的利用python進行測試工作,感興趣的朋友可以了解下
    2020-10-10
  • Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗

    Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗

    這篇文章主要介紹了Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗,文中有非常詳細的圖文及代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Python程序退出方式小結

    Python程序退出方式小結

    這篇文章主要介紹了Python程序退出方式小結,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • Python實現時間序列可視化的方法

    Python實現時間序列可視化的方法

    matplotlib庫是一個用于創(chuàng)建出版質量圖表的桌面繪圖包(2D繪圖庫),是Python中最基本的可視化工具。這篇文章主要介紹了Python時間序列可視化實現,需要的朋友可以參考下
    2019-08-08
  • Python進度條tqdm的用法詳解

    Python進度條tqdm的用法詳解

    這篇文章主要介紹了Python進度條tqdm的用法,這對于第三方庫非常豐富的Python來說,想要實現這一功能并不是什么難事,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2021-08-08
  • 在PyCharm中安裝PaddlePaddle的方法

    在PyCharm中安裝PaddlePaddle的方法

    這篇文章主要介紹了在PyCharm中安裝PaddlePaddle的方法,本文給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python 如何獲取元素在array中的下標

    python 如何獲取元素在array中的下標

    這篇文章主要介紹了python 獲取元素在array中的下標操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論