最近中文字幕国语免费完整,中文亚洲无线码49vv,中文无码热在线视频,亚洲自偷自拍熟女另类,中文字幕高清av在线

當(dāng)前位置: 首頁 > 技術(shù)教程

Python常見加密算法怎么實現(xiàn) 常見加密方式的Python實現(xiàn)

  在Python中,實現(xiàn)常見的加密算法可以通過多種方式完成,包括使用內(nèi)置模塊和第三方庫。以下是一些常見的加密算法及其Python實現(xiàn)方法:

  1. 對稱加密

  對稱加密使用相同的密鑰進行加密和解密。常見的對稱加密算法包括AES、DES和3DES。

  AES加密

  AES(高級加密標(biāo)準(zhǔn))是一種廣泛使用的對稱加密算法,支持128位、192位和256位密鑰長度。在Python中,可以使用PyCryptodome庫來實現(xiàn)AES加密。

  from Crypto.Cipher import AES

  import binascii

  # 密鑰和初始化向量

  key = b'this is a 16 key'

  iv = Random.new().read(AES.block_size)

  # 創(chuàng)建AES對象

  cipher = AES.new(key, AES.MODE_CFB, iv)

  # 要加密的數(shù)據(jù)

  data = '南來北往'

  # 加密數(shù)據(jù)

  encrypted_data = cipher.encrypt(data.encode())

  # 解密數(shù)據(jù)

  decrypted_data = cipher.decrypt(encrypted_data)

  print('加密后的數(shù)據(jù):', binascii.b2a_hex(encrypted_data))

  print('解密后的數(shù)據(jù):', decrypted_data.decode())

  運行

  DES加密

  DES(數(shù)據(jù)加密標(biāo)準(zhǔn))是一種較老的對稱加密算法,密鑰長度為56位。在Python中,可以使用PyCryptodome庫來實現(xiàn)DES加密。

  from Crypto.Cipher import DES

  import binascii

  # 密鑰

  key = b'abcdefgh'

  # 創(chuàng)建DES對象

  cipher = DES.new(key, DES.MODE_ECB)

  # 要加密的數(shù)據(jù)

  data = 'python spider!'

  # 加密數(shù)據(jù)

  encrypted_data = cipher.encrypt(data.encode())

  # 解密數(shù)據(jù)

  decrypted_data = cipher.decrypt(encrypted_data)

  print('加密后的數(shù)據(jù):', binascii.b2a_hex(encrypted_data))

  print('解密后的數(shù)據(jù):', decrypted_data.decode())

云服務(wù)器13.jpg

  3DES加密

  3DES(三重數(shù)據(jù)加密算法)是對DES的改進,通過三次DES加密提高安全性。在Python中,可以使用PyCryptodome庫來實現(xiàn)3DES加密。

  from Crypto.Cipher import DES3

  import binascii

  # 密鑰

  key = b'this is a 16 key'

  # 創(chuàng)建3DES對象

  cipher = DES3.new(key, DES3.MODE_ECB)

  # 要加密的數(shù)據(jù)

  data = '南來北往'

  # 加密數(shù)據(jù)

  encrypted_data = cipher.encrypt(data.encode())

  # 解密數(shù)據(jù)

  decrypted_data = cipher.decrypt(encrypted_data)

  print('加密后的數(shù)據(jù):', binascii.b2a_hex(encrypted_data))

  print('解密后的數(shù)據(jù):', decrypted_data.decode())

  運行

  2. 非對稱加密

  非對稱加密使用一對密鑰,公鑰用于加密,私鑰用于解密。常見的非對稱加密算法包括RSA和ECC。

  RSA加密

  RSA是一種廣泛使用的非對稱加密算法,基于大素數(shù)乘積的難分解性。在Python中,可以使用rsa庫來實現(xiàn)RSA加密。

  import rsa

  # 生成公鑰和私鑰

  (pubkey, privkey) = rsa.generate_keypair(n_length=1024)

  # 要加密的數(shù)據(jù)

  data = '南北今天很忙'

  # 加密數(shù)據(jù)

  encrypted_data = rsa.encrypt(data.encode(), pubkey)

  # 解密數(shù)據(jù)

  decrypted_data = rsa.decrypt(encrypted_data, privkey)

  print('加密后的數(shù)據(jù):', binascii.b2a_hex(encrypted_data))

  print('解密后的數(shù)據(jù):', decrypted_data.decode())

  運行

  ECC加密

  ECC(橢圓曲線密碼學(xué))是一種基于橢圓曲線數(shù)學(xué)的非對稱加密算法,具有更高的安全性和效率。在Python中,可以使用cryptography庫來實現(xiàn)ECC加密。

  from cryptography.hazmat.primitives import hashes

  from cryptography.hazmat.primitives.asymmetric import ec

  from cryptography.hazmat.primitives.asymmetric import padding

  from cryptography.hazmat.primitives import serialization

  # 生成ECC密鑰對

  private_key = ec.generate_private_key(ec.SECP256R1())

  public_key = private_key.public_key()

  # 要加密的數(shù)據(jù)

  data = '南北今天很忙'

  # 加密數(shù)據(jù)

  encrypted_data = public_key.encrypt(

  data.encode(),

  padding.PKCS1v15()

  )

  # 解密數(shù)據(jù)

  decrypted_data = private_key.decrypt(

  encrypted_data,

  padding.PKCS1v15()

  )

  print('加密后的數(shù)據(jù):', binascii.b2a_hex(encrypted_data))

  print('解密后的數(shù)據(jù):', decrypted_data.decode())

  運行

  3. 單向哈希函數(shù)

  單向哈希函數(shù)將任意長度的數(shù)據(jù)映射為固定長度的哈希值,常用于數(shù)據(jù)完整性檢查和密碼存儲。常見的哈希算法包括MD5、SHA1、SHA256等。

  MD5哈希

  MD5是一種較老的哈希算法,生成128位的哈希值。在Python中,可以使用hashlib庫來實現(xiàn)MD5哈希。

  import hashlib

  # 要哈希的數(shù)據(jù)

  data = '這是一個測試'

  # 計算MD5哈希

  hash_object = hashlib.md5(data.encode())

  hex_dig = hash_object.hexdigest()

  print('MD5哈希值:', hex_dig)

  運行

  SHA256哈希

  SHA256是一種更安全的哈希算法,生成256位的哈希值。在Python中,可以使用hashlib庫來實現(xiàn)SHA256哈希。

  import hashlib

  # 要哈希的數(shù)據(jù)

  data = '這是一個測試'

  # 計算SHA256哈希

  hash_object = hashlib.sha256(data.encode())

  hex_dig = hash_object.hexdigest()

  print('SHA256哈希值:', hex_dig)

  運行

  4. Base64編碼

  Base64是一種將二進制數(shù)據(jù)轉(zhuǎn)換為文本的編碼方式,常用于數(shù)據(jù)傳輸和存儲。在Python中,可以使用base64模塊來實現(xiàn)Base64編碼和解碼。

  import base64

  # 要編碼的數(shù)據(jù)

  data = 'hello world'

  # 編碼數(shù)據(jù)

  encoded_data = base64.b64encode(data.encode())

  # 解碼數(shù)據(jù)

  decoded_data = base64.b64decode(encoded_data).decode()

  print('Base64編碼后的數(shù)據(jù):', encoded_data)

  print('Base64解碼后的數(shù)據(jù):', decoded_data)

  運行

  5. URL編碼

  URL編碼是一種將超出ASCII范圍的字符轉(zhuǎn)換為帶%的十六進制格式的編碼方式。在Python中,可以使用urllib.parse模塊來實現(xiàn)URL編碼和解碼。

  from urllib.parse import quote, unquote

  # 要編碼的數(shù)據(jù)

  data = '南北今天很忙'

  # 編碼數(shù)據(jù)

  encoded_data = quote(data)

  # 解碼數(shù)據(jù)

  decoded_data = unquote(encoded_data)

  print('URL編碼后的數(shù)據(jù):', encoded_data)

  print('URL解碼后的數(shù)據(jù):', decoded_data)

  運行

  6. HMAC加密

  HMAC(Hash-based Message Authentication Code)是一種基于哈希函數(shù)的認(rèn)證碼,用于驗證數(shù)據(jù)的完整性和真實性。在Python中,可以使用hmac庫來實現(xiàn)HMAC加密。

  import hmac

  import hashlib

  # 要加密的數(shù)據(jù)

  data = '這是一個測試'

  # 密鑰

  key = b'123456'

  # 計算HMAC

  hmac_object = hmac.new(key, data.encode(), digestmod='sha256')

  hex_dig = hmac_object.hexdigest()

  print('HMAC值:', hex_dig)

  運行

  7. CBC模式

  CBC(Cipher Block Chaining)是一種分組加密模式,通過將前一個塊的密文與當(dāng)前塊的明文進行異或操作,提高加密的安全性。在Python中,可以使用PyCryptodome庫來實現(xiàn)CBC模式的加密。

  from Crypto.Cipher import AES

  import binascii

  # 密鑰和初始化向量

  key = b'this is a 16 key'

  iv = Random.new().read(AES.block_size)

  # 創(chuàng)建AES對象

  cipher = AES.new(key, AES.MODE_CBC, iv)

  # 要加密的數(shù)據(jù)

  data = '南來北往'

  # 加密數(shù)據(jù)

  encrypted_data = cipher.encrypt(data.encode())

  # 解密數(shù)據(jù)

  decrypted_data = cipher.decrypt(encrypted_data)

  print('加密后的數(shù)據(jù):', binascii.b2a_hex(encrypted_data))

  print('解密后的數(shù)據(jù):', decrypted_data.decode())

  運行

  8. ECB模式

  ECB(Electronic Codebook)是一種分組加密模式,每個塊獨立加密,但安全性較低。在Python中,可以使用PyCryptodome庫來實現(xiàn)ECB模式的加密。

  from Crypto.Cipher import AES

  import binascii

  # 密鑰

  key = b'this is a 16 key'

  # 創(chuàng)建AES對象

  cipher = AES.new(key, AES.MODE_ECB)

  # 要加密的數(shù)據(jù)

  data = '南來北往'

  # 加密數(shù)據(jù)

  encrypted_data = cipher.encrypt(data.encode())

  # 解密數(shù)據(jù)

  decrypted_data = cipher.decrypt(encrypted_data)

  print('加密后的數(shù)據(jù):', binascii

 


猜你喜歡