1.1 介紹
base64是一種用64個字元來表示任意二進位制資料的方法。base64是一種編碼方式而不是加密演算法。只是看上去像是加密
base64使用a-z
,a-z
,0-9
,+
,/
64個字元實現對資料進行加密
1.2 python使用
import base64
base64.b64encode(b'sxt')
b'ymluyxj5ahn0cmluzw=='
base64.b64decode(b'ymluyxj5ahn0cmluzw==')
2.1 介紹
md5資訊摘要演算法(英語:md5 message-digest algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致
當我們需要儲存某些密碼資訊以用於身份確認時,如果直接將密碼資訊以明碼方式儲存在資料庫中,不使用任何保密措施,系統管理員就很容易能得到原來的密碼資訊,這些資訊一旦洩露, 密碼也很容易被破譯。為了增加安全性,有必要對資料庫中需要保密的資訊進行加密,這樣,即使有人得到了整個資料庫,如果沒有解密演算法,也不能得到原來的密碼資訊
2.2 python介紹
import hashlib
def test_md51():
m = hashlib.md5()
m.update(b'sxt')
pwd = m.hexdigest()
print(pwd)
def test_md52():
pwd = hashlib.new('md5', b'sxt').hexdigest()
print(pwd)
def test_md53():
data ='你好'
pwd = hashlib.md5(data.encode(encoding='utf-8')).hexdigest()
print(pwd)
3.1 介紹
des全稱為data encryption standard,即資料加密標準,是一種使用金鑰加密的演算法。該加密演算法是一種對稱加密方式,其加密運算、解密運算需要使用的是同樣的金鑰(一組字串)即可
注意:現在用aes這個標準來替代原先先的des
aes與des的區別:
應用場景的不同:
使用des/aes進行資料互動時要求雙方都擁有相同的私鑰
3.2 安裝
pip3 install pycryptodome
3.3 python使用
des
import base64
from crypto.cipher import des
class encryptdate:
def __init__(self, key):
self.key = key.encode("utf-8") # 初始化**
self.length = des.block_size # 初始化資料塊大小
self.aes = des.new(self.key, des.mode_ecb) # 初始化aes,ecb模式的例項
def pad(self, text):
"""#填充函式,使被加密資料的位元組碼長度是block_size的整數倍
"""# count = len(text.encode('utf-8'))
# add = self.length - (count % self.length)
# entext = text + (chr(add) * add)
# return entext
args = text.encode('utf-8')
while len(args) % des.block_size != 0:
args += b'\x00'
return args.decode()
def encrypt(self, encrdata): # 加密函式
res = self.aes.encrypt(self.pad(encrdata).encode("utf8"))
msg = str(base64.b64encode(res), encoding="utf8")
return msg
def decrypt(self, decrdata): # 解密函式
res = base64.decodebytes(decrdata.encode("utf8"))
msg = self.aes.decrypt(res).decode("utf8")
return msg
eg = encryptdate("12345678") # 這裡**的長度必須是16的倍數
data =
res = eg.encrypt(str(data))
print(res)
print(eg.decrypt(res))
aes
import base64
from crypto.cipher import aes
class encryptdate:
def __init__(self, key):
self.key = key.encode("utf-8") # 初始化**
self.length = aes.block_size # 初始化資料塊大小
self.aes = aes.new(self.key, aes.mode_ecb) # 初始化aes,ecb模式的例項
def pad(self, text):
"""#填充函式,使被加密資料的位元組碼長度是block_size的整數倍
"""# count = len(text.encode('utf-8'))
# add = self.length - (count % self.length)
# entext = text + (chr(add) * add)
# return entext
args = text.encode('utf-8')
while len(args) % aes.block_size != 0:
args += b'\x00'
return args.decode()
def encrypt(self, encrdata): # 加密函式
res = self.aes.encrypt(self.pad(encrdata).encode("utf8"))
msg = str(base64.b64encode(res), encoding="utf8")
return msg
def decrypt(self, decrdata): # 解密函式
res = base64.decodebytes(decrdata.encode("utf8"))
msg = self.aes.decrypt(res).decode("utf8")
return msg
eg = encryptdate("1234567890123456") # 這裡**的長度必須是16的倍數
data =
res = eg.encrypt(str(data))
print(res)
print(eg.decrypt(res))
4.1 介紹
rsa加密演算法是一種非對稱加密演算法。在公開金鑰加密和電子商業中rsa被廣泛使用
rsa演算法需要兩個金鑰:
使用時都是使用公鑰加密,使用私鑰解密。公鑰可以公開,私鑰自己保留。
演算法強度複雜、安全性依賴演算法與金鑰但是由於其演算法複雜,而使得加密解密速度沒有對稱加密速度快。
4.2 python使用
class encryptdate():
def encrypt_data(self,msg,pb):
key = rsa.importkey(pb)
cipher = pkcs1_cipher.new(key)
encrypt_text = base64.b64encode(cipher.encrypt(bytes(msg.encode("utf-8"))))
return encrypt_text.decode('utf-8')
def decrypt_data(self,msg,pv):
key = rsa.importkey(pv)
cipher = pkcs1_cipher.new(key)
back_text = cipher.decrypt(base64.b64decode(msg), 0)
return back_text.decode('utf-8')
if __name__ == '__main__':
enc = encryptdate()
tmp = enc.encrypt_data('123',public_key)
print(enc.decrypt_data(tmp,private_key))
加密 常見加密方式
由於在學習jwt的時候會涉及使用很多加密演算法,所以在這裡做下掃盲,簡單了解就可以 加密演算法種類有 解釋 加密後,密文可以反向解密得到密碼原文.4.1.1.對稱加密 檔案加密和解密使用相同的金鑰,即加密金鑰也可以用作解密金鑰 解釋 在對稱加密演算法中,資料發信方將明文和加密金鑰一起經過特殊的加密演...
目前常見的郵件加密方式
第一種 利用對稱加密演算法加密郵件 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才...
目前常見的郵件加密方式
第一種 利用對稱加密演算法加密郵件 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才...