網站首頁 編程語言 正文
前言:
常見的加密算法基本分為這幾類:
- 線性散列算法(簽名算法)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)
原文鏈接:https://blog.csdn.net/qq_52330730/article/details/125134501
相關推薦
- 2024-04-08 啟動spring-boot出現Error creating bean with name ‘conf
- 2022-04-09 詳解Docker下nginx外掛配置和文件_docker
- 2022-10-09 xshell5使用ssh連接阿里云服務器的實現步驟_Linux
- 2022-06-30 Oracle在PL/SQL中使用子查詢_oracle
- 2022-04-20 Mac中pyenv的安裝與使用教程_python
- 2023-05-05 Python?pip更新的兩種方式詳解_python
- 2022-12-05 TensorFlow中關于tf.app.flags命令行參數解析模塊_python
- 2022-10-29 tensorflow2數據讀取P2: tf.data.Dataset.from_generator通
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支