首頁 > 軟體

Python常見的幾種資料加密方式

2022-06-06 14:02:17

前言:

常見的加密演演算法基本分為這幾類:

  • 線性雜湊演演算法(簽名演演算法)MD5,sha1
  • 對稱性加密演演算法 AES DES
  • 非對稱性加密演演算法 RSA

一、md5加密

MD5是一種被廣泛使用的線性雜湊演演算法,可以產生出一個128位元(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整的一致性。且MD5加密之後產生的是一個固定長度(32位元或16位元)的資料。

解密

常規講MD5是不存在解密的。但是理論上MD5是可以進行反向暴力破解的。暴力破解的大致原理就是用很多不同的資料進行加密後跟已有的加密資料進行對比,由此來尋找規律。理論上只要資料量足夠龐大MD5是可以被破解的。但是要注意,破解MD5是需要考慮破解的成本(時間和機器效能)。假設破解當前的MD5密碼需要目前計算能力最優秀的計算機工作100年才能破解完成。那麼當前的MD5密碼就是安全的。

增加破解成本的方法

使用一段無意義且隨機的私匙進行MD5加密會生成一個加密串,我們暫且稱之為串1
將要加密的的資料跟串1拼接,再進行一次MD5,這時會生成串2
將串2再次進行MD5加密,這時生成的串3就是我們加密後的資料。

我們在註冊賬號時的密碼一般都是用的MD5加密:

import hashlibh = hashlib.md5()
str = 'boboadmin'
h.update(str.encode())
msg = h.hexdigest()
print(msg)

SHA1安全雜湊演演算法

SHA1比MD5的安全性更強,但也比MD5慢

import hashlib
sha1 = hashlib.sha1()
data = '2333333'
sha1.update(data.encode('utf-8'))
sha1_data = sha1.hexdigest()
print(sha1_data)

二、Base64偽加密

Base64是一種用64個字元來表示任意二進位制資料的方法。base64是一種編碼方式而不是加密演演算法。只是看上去像是加密而已。
Base64使用A–Z,a–z,0–9,+,/ 這64個字元實現對資料進行加密。

import base64
str='admin'
str=str.encode('utf-8')
#加密
bs64=base64.b64encode(str)
print(bs64)
#解密
debs64=base64.b64decode(bs64)
print(debs64.decode())

三、DES/AES

DES全稱為Data Encryption Standard,即資料加密標準,是一種使用金鑰加密的演演算法。該加密演演算法是一種對稱加密方式,其加密運算、解密運算需要使用的是同樣的金鑰(一組字串)即可。

注意:

現在用AES這個標準來替代原先的DES。

AES和DES的區別

加密後密文長度的不同:

  • DES加密後密文長度是8的整數倍
  • AES加密後密文長度是16的整數倍

應用場景的不同:

  • 企業級開發使用DES足夠安全
  • 如果要求高使用AES
  • 使用DES/AES進行資料互動時要求雙方都擁有相同的私匙

破解方法

  • 暴力破解
  • DES如果使用 56 位的金鑰,則可能的金鑰數量是 2 的 56 次方個。只要計算足夠強大是可以被破解的
#需要下載安裝pyDes模組
import binascii
from pyDes import des, CBC, PAD_PKCS5

def des_encrypt(secret_key,s):
    iv = secret_key
    k = des(secret_key,CBC,iv,pad=None,padmode=PAD_PKCS5)
    en = k.encrypt(s,padmode=PAD_PKCS5)
    return binascii.b2a_hex(en)

def des_decrypt(secret_key, s):
    iv = secret_key
    k = des(secret_key,CBC,iv,pad = None,padmode = PAD_PKCS5)
    de = k.decrypt(binascii.a2b_hex(s),padmode = PAD_PKCS5)
    return desecret_str = des_encrypt('12345678', 'I love YOU~')
print(secret_str)
clear_str = des_decrypt('12345678', secret_str)
print(clear_str)

四、RSA

RSA加密:

RSA加密演演算法是一種非對稱加密演演算法。在公開金鑰加密和電子商業中RSA被廣泛使用。

非對稱加密演演算法

非對稱加密演演算法需要兩個金鑰:

  • 公開金鑰(publickey:簡稱公鑰)
  • 私有金鑰(privatekey:簡稱私鑰)
  • 公鑰與私鑰是一對,如果用公鑰對資料進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演演算法叫作非對稱加密演演算法。

注意:

  • 使用時都是使用公匙加密使用私匙解密。公匙可以公開,私匙自己保留。
  • 演演算法強度複雜、安全性依賴於演演算法與金鑰但是由於其演演算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。

使用流程和場景介紹

  • 通過公匙加密,使用私匙解密。私匙是通過公匙計算生成的。假設ABC三方之間相互要進行加密通訊。大家相互之間使用公匙進行資訊加密,資訊讀取時使用各自對應的私匙進行資訊解密
  • 使用者輸入的支付密碼會通過RSA加密

公鑰私鑰生成方式

公私匙可以線上生成:

[http://web.chacuo.net/netrsakeypair]

import rsa

def rsaEncrypt(str):
    (pubkey,privkey)=rsa.newkeys(512)
    print("pub:",pubkey)
    print("priv:",privkey)

    content =str.encode('utf-8')

    crypto=rsa.encrypt(content,pubkey)
    return (crypto,privkey)

def rsaDecrypt(str,pk):
    content = rsa.decrypt(str,pk)
    con=content.decode('utf-8')
    return con

(deData,privKey)=rsaEncrypt("hello")
print('加密後的密文',deData)
content = rsaDecrypt(deData,privKey)
print(content)

到此這篇關於Python常見的幾種資料加密方式的文章就介紹到這了,更多相關Python 資料加密內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com