欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 密碼加密與解密的實(shí)現(xiàn)

 更新時(shí)間:2023年02月07日 08:28:57   作者:黎陌MLing  
本文主要介紹了python 密碼加密與解密的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

由于計(jì)算機(jī)軟件的非法復(fù)制,通信的泄密、數(shù)據(jù)安全受到威脅。一般為了安全,會(huì)要求將數(shù)據(jù)庫(kù)名稱、密碼等信息進(jìn)行加密。所以加密在開(kāi)發(fā)過(guò)程中是經(jīng)常使用到的技術(shù),在一些重要場(chǎng)景中都有所應(yīng)用,如:登錄、支付、oauth等,場(chǎng)景不同需要搭配不一樣的簽名加密算法來(lái)達(dá)到業(yè)務(wù)目標(biāo)。項(xiàng)目中用到了python端,需要用到python對(duì)密碼的加密解密模塊。
  加密算法分散列算法、對(duì)稱加密、非對(duì)稱加密。參考網(wǎng)上資料,初步將密碼管理的邏輯思路整理了一下。

一、對(duì)稱加密

就是采用這種加密方法的雙方使用方式用同樣的密鑰進(jìn)行加密和解密。密鑰是控制加密及解密過(guò)程的指令。算法是一組規(guī)則,規(guī)定如何進(jìn)行加密和解密。常見(jiàn)的對(duì)稱算法有AES、DES、3DES等。

1.1 安裝第三方庫(kù) - PyCrypto

對(duì)于對(duì)稱加密或非對(duì)稱都需要安裝第三方庫(kù),Python中的密碼庫(kù)是PyCrypto,但在2012年已停止更新,現(xiàn)在使用 PyCrytodome 取代 PyCrypto 。
window下安裝pycryptodemo,linux下安裝pycrypto

pip install pycryptodome

示例如下:

1

1.2 加密實(shí)現(xiàn)

AES算法是目前應(yīng)用最廣泛的加密算法。AES有5種加密模式,分別是ECB, CBC, CTR, CFB, OFB。下面以AES的ECB模式為例,同樣AES也需要加密秘鑰aes_key,需要注意的是如果加密數(shù)據(jù)不足16或32位時(shí)需要補(bǔ)足為它們的倍數(shù),下面以16的倍數(shù)為例:

先創(chuàng)建函數(shù),不全數(shù)據(jù)不足16倍數(shù)的部分

def addStrToSpecifyLen(s,specifyLen=0):
    """
    s不是specifyLen的倍數(shù)那就補(bǔ)足為specifyLen的倍數(shù)
    :param s: 需要加密的參數(shù)
    :param specifyLen: 指定參數(shù)的位數(shù)
    :return: 補(bǔ)足位數(shù)的參數(shù)
    """
    if specifyLen <= 0:
        specifyLen = 1;
    while len(s) % specifyLen != 0:
        s += '\0'
    return s.encode(encoding='utf-8')

加密算法 - aes

def encrypt_aes(text='', key=''):
    """
    aes的ecb模式加密
    :param data: 加密數(shù)據(jù)
    :param aes_key: 加密的秘鑰
    :return: 加密之后的密文
    """
    # 初始化加密器
    aes = AES.new(addStrToSpecifyLen(key,16), AES.MODE_ECB)
    # 先進(jìn)行aes加密
    encrypt = aes.encrypt(addStrToSpecifyLen(text,16))
    # 用base64轉(zhuǎn)成字符串形式
    encrypted_text = str(base64.encodebytes(encrypt), encoding='utf-8')  # 執(zhí)行加密并轉(zhuǎn)碼返回bytes
    return encrypted_text

解密算法

def decrypt_aes(data, aes_key):
    """
    aes的ecb模式解密
    :param data: 待解密數(shù)據(jù)
    :param aes_key: 加密的秘鑰
    :return: 解密之后的數(shù)據(jù)
    """
    # 初始化加密器
    aes = AES.new(addStrToSpecifyLen(aes_key,16), AES.MODE_ECB)
    #優(yōu)先逆向解密base64成bytes
    base64_decrypted = base64.decodebytes(addStrToSpecifyLen(data,16))
    #執(zhí)行解密密并轉(zhuǎn)碼返回str
    decrypted_text = str(aes.decrypt(base64_decrypted),encoding='utf-8').replace('\0','')
    return decrypted_text

測(cè)試輸出如下:

if __name__ == '__main__':
    key = '12223'
    data = 'test12dcds'
    encrypt = encrypt_aes(data,key)
    print(encrypt)
    print(decrypt_aes(encrypt,key))

2

二、非對(duì)稱加密

與對(duì)稱加密算法不同,非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。常見(jiàn)的非對(duì)稱算法有RSA、DSA、ECC等。

三、摘要算法

Python的hashlib提供了常見(jiàn)的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。摘要算法又稱哈希算法、散列算法。它通過(guò)一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)。

一般用于網(wǎng)絡(luò)通信中消息加密,前提是雙方先要約定好key,就像接頭暗號(hào)一樣,然后消息發(fā)送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 發(fā)送者的相對(duì)比是否相等,這樣就能驗(yàn)證消息的真實(shí)性,及發(fā)送者的合法性了。

摘要算法之所以能指出數(shù)據(jù)是否被篡改過(guò),就是因?yàn)檎瘮?shù)是一個(gè)單向函數(shù),計(jì)算f(data)很容易,但通過(guò)digest反推data卻非常困難。而且,對(duì)原始數(shù)據(jù)做一個(gè)bit的修改,都會(huì)導(dǎo)致計(jì)算出的摘要完全不同。散列算法加密數(shù)據(jù)一般采用base64編碼格式。常用的散列算示例如下:

3.1 md5加密

是最常見(jiàn)的摘要算法,速度很快,生成結(jié)果是固定的128 bit字節(jié),通常用一個(gè)32位的16進(jìn)制字符串表示。

import hashlib
hash = hashlib.md5()
hash.update("mayi".encode("utf-8"))
# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

3.2 sha1加密

SHA1的結(jié)果是160 bit字節(jié),通常用一個(gè)40位的16進(jìn)制字符串表示。

import hashlib
hash = hashlib.sha1()
hash.update("mayi".encode("utf-8"))
# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

3.3 sha256加密

比SHA1更安全的算法是SHA256和SHA512,不過(guò)越安全的算法越慢,而且摘要長(zhǎng)度更長(zhǎng)。

import hashlib
hash = hashlib.sha256()
hash.update("mayi".encode("utf-8"))
# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

3.4 sha384加密

import hashlib
hash = hashlib.sha384()
hash.update("mayi".encode("utf-8"))
# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

3.5 sha512加密

import hashlib
hash = hashlib.sha512()
hash.update("mayi".encode("utf-8"))
# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492
daac2b9c03a89defe
print(hash.hexdigest())

3.6 “加鹽”加密

以上加密算法雖然很厲害,但仍然存在缺陷,通過(guò)撞庫(kù)可以反解。所以必要對(duì)加密算法中添加自定義key(通過(guò)加入用戶名或者隨機(jī)字符等)再來(lái)做加密。

import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update("mayi".encode("utf-8"))
# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

到此這篇關(guān)于python 密碼加密與解密的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 密碼加密與解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用python實(shí)現(xiàn)九九乘法表實(shí)例

    用python實(shí)現(xiàn)九九乘法表實(shí)例

    大家好,本篇文章主要講的是用python實(shí)現(xiàn)九九乘法表實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • pytorch查看網(wǎng)絡(luò)參數(shù)顯存占用量等操作

    pytorch查看網(wǎng)絡(luò)參數(shù)顯存占用量等操作

    這篇文章主要介紹了pytorch查看網(wǎng)絡(luò)參數(shù)顯存占用量等操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Python實(shí)現(xiàn)list反轉(zhuǎn)實(shí)例匯總

    Python實(shí)現(xiàn)list反轉(zhuǎn)實(shí)例匯總

    這篇文章主要介紹了Python實(shí)現(xiàn)list反轉(zhuǎn)的方法,實(shí)例總結(jié)了關(guān)于list的各種較為常見(jiàn)的操作技巧,需要的朋友可以參考下
    2014-11-11
  • python方法生成txt標(biāo)簽文件的實(shí)例代碼

    python方法生成txt標(biāo)簽文件的實(shí)例代碼

    今天小編就為大家分享一篇python方法生成txt標(biāo)簽文件的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python之os模塊案例詳解

    Python之os模塊案例詳解

    這篇文章主要介紹了Python之os模塊案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Python接口開(kāi)發(fā)實(shí)現(xiàn)步驟詳解

    Python接口開(kāi)發(fā)實(shí)現(xiàn)步驟詳解

    這篇文章主要介紹了Python接口開(kāi)發(fā)實(shí)現(xiàn)步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 把vgg-face.mat權(quán)重遷移到pytorch模型示例

    把vgg-face.mat權(quán)重遷移到pytorch模型示例

    今天小編就為大家分享一篇把vgg-face.mat權(quán)重遷移到pytorch模型示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python畫(huà)立方體--魔方

    python畫(huà)立方體--魔方

    這篇文章主要介紹了python畫(huà)立方體--魔方,下文分享詳細(xì)的代碼說(shuō)明,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • 詳解Python中元組的三個(gè)不常用特性

    詳解Python中元組的三個(gè)不常用特性

    元組是Python中一種重要的內(nèi)置數(shù)據(jù)類型。與列表一樣,我們經(jīng)常使用元組將多個(gè)對(duì)象保存為相應(yīng)的數(shù)據(jù)容器。本文為大家總結(jié)了元組的三個(gè)不常用特性,感興趣的小伙伴可以了解一下
    2022-07-07
  • 基于Django實(shí)現(xiàn)日志記錄報(bào)錯(cuò)信息

    基于Django實(shí)現(xiàn)日志記錄報(bào)錯(cuò)信息

    這篇文章主要介紹了基于Django實(shí)現(xiàn)日志記錄報(bào)錯(cuò)信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論