【Python】數據加密解密技術

来源:https://www.cnblogs.com/123456feng/archive/2022/03/30/16078805.html
-Advertisement-
Play Games

Python如何加密解密?感興趣的小伙伴可以舉一下腳,我看看有多少。咳咳咳,正式開始了,今天給大家分享的是Python如何加密解密,感興趣的小伙伴要認真學起來。 前言 加密演算法主要分為:哈希演算法、對稱加密演算法、非對稱加密演算法。 •哈希演算法:MD5、SHA256 •對稱加密演算法:DES、AES、CBC ...


Python如何加密解密?感興趣的小伙伴可以舉一下腳,我看看有多少。咳咳咳,正式開始了,今天給大家分享的是Python如何加密解密,感興趣的小伙伴要認真學起來。

在這裡插入圖片描述

前言

加密演算法主要分為:哈希演算法、對稱加密演算法、非對稱加密演算法。

•哈希演算法:MD5、SHA256

•對稱加密演算法:DES、AES、CBC

•非對稱加密演算法:RSA

此外,還有一種編碼演算法,叫Base64(註意它不是加密演算法),也是用的比較多的。

在這裡插入圖片描述

一、哈希演算法

哈希是一種加密演算法,也稱為散列函數或雜湊函數。哈希函數是一個公共函數,可以將任意長度的消息M映射成為一個長度較短且長度固定的值H(M),稱H(M)為哈希值、散列值(Hash Value)、雜湊值或者消息摘要。它是一種單向密碼體制,即一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程。

特點:

•易壓縮:對於任意大小的輸入X,Hash值的長度很小,在實際應用中,函數H產生的Hash值其長度是固定的。

•易計算:對於任意給定的消息,計算其Hash值比較容易。

•單向性:對於給定的Hash值,要找到使得在計算上是不可行的,即求Hash的逆很困難。在給定某個哈希函數H和哈希值H(M)的情況下,得到M在計算上是不可行的,即從哈希輸出無法倒推輸入的原始數值。這是哈希函數安全性的基礎。

在這裡插入圖片描述

MD5加密

###Python學習交流Q群:906715085###
import hashlib

def get_md5_data(inStr:str):   
"""
  :param inStr: 待加密字元串
    :return: 加密結果
      """  
 md5 = hashlib.md5()     #實例化對象   
 md5.update(inStr.encode('utf-8'))   #使用update方法加密   
 return md5.hexdigest()          #調用hexdigest方法獲取加密結果
 
if __name__ == '__main__':  
 print(get_md5_data('asfa')) 
   #輸出結果
   #9fa16ee8683740b1883e5844d8c288ac

 

SHA256加密

import hashlib

def get_sha256_data(inStr:str):
   """ 
    :param inStr: 待加密字元串 
     :return: 加密結果 
      """  
       sha256 = hashlib.sha256()     #實例化對象  
        sha256.update(inStr.encode('utf-8'))   #使用update方法加密   
        return sha256.hexdigest()          #調用hexdigest方法獲取加密結果
        
if __name__ == '__main__':  
 print(get_sha256_data('asfa'))
 #輸出結果
 #aaf01ca9bbd8ca8cc1703f99e62c71b56e4d01489803bf5e97bbcec646504e52

 

二、對稱加密演算法

雙方使用的同一個密鑰,既可以加密又可以解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。

優點:

•速度快,對稱性加密通常在消息發送方需要加密大量數據時使用,演算法公開、計算量小、加密速度快、加密效率高。

缺點:

•在數據傳送前,發送和接收方必須商定好秘鑰,然後使雙方都能保存好秘鑰。其次如果一方的秘鑰被泄露,那麼加密信息也就不安全了。另外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的唯一秘鑰,這使得收、發雙方 所擁有的鑰匙數量巨大,秘鑰管理成為雙方的負擔。

ECB

from Crypto.Cipher import AES

password = b'1234567812345678' #秘鑰,b就是表示為bytes類型
text = b'abcdefghijklmnhi' #需要加密的內容,bytes類型
aes = AES.new(password,AES.MODE_ECB) #創建一個aes對象
#AES.MODE_ECB 表示模式是ECB模式
en_text = aes.encrypt(text) #加密明文
print("密文:",en_text) #加密明文,bytes類型
den_text = aes.decrypt(en_text) # 解密密文
print("明文:",den_text)

#密文:b'WU\xe0\x0e\xa3\x87\x12\x95\\]O\xd7\xe3\xd4 )'
#明文:b'abcdefghijklmnhi'

 

在這裡插入圖片描述

CBC

from Crypto.Cipher import AES
#password = b'1234567812345678' #秘鑰,b就是表示為bytes類型
#iv = b'1234567812345678' # iv偏移量,bytes類型
#text = b'abcdefghijklmnhi' #需要加密的內容,bytes類型
#aes = AES.new(password,AES.MODE_CBC,iv) #創建一個aes對象#
 # AES.MODE_CBC 表示模式是CBC模式
 # en_text = aes.encrypt(text)
 # print("密文:",en_text) #加密明文,bytes類型
 # aes = AES.new(password,AES.MODE_CBC,iv) #CBC模式下解密需要重新創建一個aes對象
 # den_text = aes.decrypt(en_text)
 # print("明文:",den_text)#
 # 
 密文:b'\x93\x8bN!\xe7~>\xb0M\xba\x91\xab74;0'
 # 明文:b'abcdefghijklmnhi'

 

在這裡插入圖片描述

三、非對稱加密演算法

一對秘鑰由公鑰和私鑰組成(可以使用很多對密鑰)。

私鑰解密公鑰加密數據,公鑰解密私鑰加密數據(私鑰公鑰可以互相加密解密)

優點:

•安全

缺點:

•速度較慢

代表:

•RSA、Elgamal、背包演算法、Rabin、Diffie-Hellman、ECC(橢圓曲線加密演算法)。

•使用廣泛的是RAS演算法,Elgamal其次。

import rsa

str = 'asfa'
(pubkey,privkey) = rsa.newkeys(1024)    #實例化對象
pwd = rsa.encrypt(str.encode('utf-8'),pubkey)   #公鑰加密
print("加密結果===》",pwd.hex())depwd = rsa.decrypt(pwd,privkey)#私鑰解密
print("解密結果===》", depwd.decode())

#加密結果===》 6bc0709e403e3e443a97e267929c6f1154c0b5b74a8b7320d89285d626498ba47e394cbdd8ee2c06f7dfac17291c5af317b5d7f7a2bf3e7691a9a6639c06a7957877ebec8eeece2c771b6a1ac3cc079da485acd5682ed8f090b3eb935ae637cd8fab92e656e4b6d8d312b409a141af8ecbc0b972ada068fe116343c57eb487fe
# 解密結果===》 asfa

 

雙重加密–公鑰加密,私鑰解密,私鑰簽名,公鑰驗簽

在這裡插入圖片描述

在這裡插入圖片描述

四、Base64編碼

Base64是編碼技術而不是加密技術。可以將任意的位元組數組數據,通過演算法,聲稱只有(大小寫英文、數字、+、/)(一共64個字元)內容表示的字元串數據。即將任意的內容轉換為可見的字元串形式。提供解碼功能。

import base64
str = 'asfa'
ba64 = base64.b64encode(str.encode('UTF-8'))     #編碼
print("編碼結果====》",ba64)
reba64 = base64.b64decode(ba64)          #調用hexdigest方法獲取加密結果
print("解碼位元組結果====》",reba64)
print("解碼結果====》",reba64.decode('utf-8'))

#編碼結果====》 b'YXNmYQ=='
#解碼位元組結果====》b'asfa'
#解碼結果====》 asfa

 

最後
這個小技巧大家都掌握了嗎?掌握的記得點贊,沒掌握的記得點贊收藏,這一章到這裡就結束了,想看什麼可以告訴我。看這密密麻麻的代碼,必須來一個大大的贊。

在這裡插入圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 屬性的簡潔表示法 ES6 允許在大括弧裡面直接寫入變數和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。 const foo = 'bar'; const baz = { foo }; console.log(baz); // { foo: 'bar' } function f(name, age) ...
  • 一、冒泡排序 原理:相鄰兩元素之間兩兩比較,比較出大值進行賦值互換,再依次與相鄰的元素比較,層層遞進。#互換元素位置,相互賦值。 時間複雜度:最好O(n),最差O(n^2) 1、比較相鄰的兩個元素,如果前一個比後一個大,則交換位置。2、比較完第一輪的時候,最後一個元素是最大的元素。3、這時候最後一個 ...
  • 魔術方法(特定時機自動觸發) __init__ 構造方法 觸發時機:實例化對象,初始化的時候觸發 功能:為對象添加成員 參數:參數不固定,至少一個self參數 返回值:無 # (1) 基本語法 class MyClass(): def __init__(self): print("構造方法被觸發 . ...
  • 代理模式是什麼 代理模式是一種結構型設計模式, 讓你能提供真實服務對象的替代品給客戶端使用。 代理接收客戶端的請求併進行一些處理 (訪問控制和緩存等), 然後再將請求傳遞給服務對象。 為什麼用代理模式 在某些情況下客戶類不想或者不能訪問目標對象,這時候就可以使用代理類訪問。 代理模式怎麼實現 pac ...
  • import 導入模塊或包 文件就是一個模塊,文件夾就是一個包文件夾裡面可以有很多文件,就相當於包中有好多的模塊. import 模塊或者包(包是文件夾,模塊是文件)模塊不會被重覆導入,引入一次終生受益 '''調用的時候: 模塊.變數 模塊.函數 模塊.類''' (1) 模塊.變數 print(my ...
  • 1.標題 //標題一共六個級別 # 一級標題 ## 二級標題 ### 三級標題 #### 四級標題 ##### 五級標題 ###### 六級標題 #一級標題 ##二級標題 ###三級標題 ####四級標題 #####五級標題 六級標題 2.字體 **粗體** *斜體* ***粗體加斜體*** ~~刪 ...
  • 內容概要 序列化器介紹 Serializer的使用 基本使用(序列化) 欄位類型 欄位參數 序列化 定製序列化的欄位 反序列化 反序列化之新增 反序列化之修改 反序列化之局部和全局鉤子 ModelSerializer 模型類序列化器 ModelSerializer 額外添加參數 內容詳細 序列化器介 ...
  • 在實際項目中其中一部分邏輯可能會因為調用了外部服務或者等待鎖等情況下出現不可預料的異常,在這個時候我們可能需要對調用這部分邏輯進行重試,代碼裡面主要就是使用for迴圈寫一大坨重試的邏輯,各種硬編碼,各種辣眼睛的補丁。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...