1. 程式人生 > 其它 >csrf解決方案

csrf解決方案

hashlib模組

        加密:將明文資料通過一系列演算法變成密文資料(目的就是為了資料的安全)

        加密演算法:md系列 sha系列 base系列 hmac系列

        # 基本使用
        import hashlib


        # 1.先確定演算法型別(md5普遍使用)
        md5 = hashlib.md5()
        # 2.將明文資料傳遞給md5演算法(update只能接受bytes型別資料)
        # md5.update('123'.encode('utf8'))
        md5.update(b'123')
        # 3.獲取加密之後的密文資料(沒有規則的一串隨機字串)
        res = md5.hexdigest()
        print(res)
        """
        1.加密之後的密文資料是沒有辦法反解密成明文資料的
            市面上所謂的破解 其實就是提前算出一系列明文對應的密文
            之後比對密文再獲取明文
        """

詳細操作

        # import hashlib
        #
        #
        # # 1.先確定演算法型別(md5普遍使用)
        # md5 = hashlib.md5()

        # # 2.將明文資料傳遞給md5演算法(update只能接受bytes型別資料)
        # # md5.update('123'.encode('utf8'))
        # md5.update(b'123')

        # # 3.獲取加密之後的密文資料(沒有規則的一串隨機字串)
        # res = md5.hexdigest()
        # print(res)
        """
        1.加密之後的密文資料是沒有辦法反解密成明文資料的
            市面上所謂的破解 其實就是提前算出一系列明文對應的密文
            之後比對密文再獲取明文
        """

        # 1.明文資料只要是相同的 那麼無論如何傳遞加密結果肯定是一樣的
        # import hashlib

        # # 1.先確定演算法型別(md5普遍使用)
        # md5 = hashlib.md5()

        # # 2.將明文資料傳遞給md5演算法(update只能接受bytes型別資料)
        # # md5.update('123'.encode('utf8'))
        # # md5.update(b'hellojason123')
        # md5.update(b'hello')
        # md5.update(b'jason')
        # md5.update(b'123')  # 4bd388611b31c548eedef14b16c9868c

        # # 3.獲取加密之後的密文資料(沒有規則的一串隨機字串)
        # res = md5.hexdigest()
        # print(res)  # 4bd388611b31c548eedef14b16c9868c


        # 2.密文資料越長表示內部對應的演算法越複雜 越難被正向破解
        # import hashlib
        # # 1.先確定演算法型別(md5普遍使用)
        # md5 = hashlib.sha256()

        # # 2.將明文資料傳遞給md5演算法(update只能接受bytes型別資料)
        # # md5.update('123'.encode('utf8'))
        # # md5.update(b'hellojason123')
        # md5.update(b'hello')
        # md5.update(b'jason')
        # md5.update(b'123')  # 6ec0f865ec4e9bcf9abc7f6c0e7268acfb2ba36f3e460fd592a214f7eacc92b0

        # # 3.獲取加密之後的密文資料(沒有規則的一串隨機字串)
        # res = md5.hexdigest()
        # print(res)  # 6ec0f865ec4e9bcf9abc7f6c0e7268acfb2ba36f3e460fd592a214f7eacc92b0
        """
        密文越長表示演算法越複雜 對應的破解演算法的難度越高
        但是越複雜的演算法所需要消耗的資源也就越多 密文越長基於網路傳送需要佔據的資料也就越大
            具體使用什麼演算法取決於專案的要求 一般情況下md5足夠了
        """

        # 3.涉及到使用者密碼儲存 其實都是密文 只要使用者自己知道明文是什麼
        """
            1.內部程式設計師無法得知明文資料
            2.資料洩露也無法得知明文資料
        ATM購物車練習 使用者密碼採取的就是密文存取
        """

        # 4.加鹽處理
        """
        在對明文資料做加密處理過程前新增一些干擾項
        """
        # import hashlib
        # # 1.先確定演算法型別(md5普遍使用)
        # md5 = hashlib.md5()

        # # 2.將明文資料傳遞給md5演算法(update只能接受bytes型別資料)
        # # md5.update('123'.encode('utf8'))
        # # 加鹽(干擾項)
        # md5.update('公司內部自己定義的鹽'.encode('utf8'))
        # # 真實資料
        # md5.update(b'hellojason123')

        # # 3.獲取加密之後的密文資料(沒有規則的一串隨機字串)
        # res = md5.hexdigest()
        # print(res)  # 4326fe1839d7c4186900eb2b356d4f8a


        # 5.動態加鹽
        """
        在對明文資料做加密處理過程前新增一些變化的干擾項
        """
        # import hashlib
        # # 1.先確定演算法型別(md5普遍使用)
        # md5 = hashlib.md5()

        # # 2.將明文資料傳遞給md5演算法(update只能接受bytes型別資料)
        # # md5.update('123'.encode('utf8'))
        # # 加鹽(干擾項)
        # # md5.update('公司內部自己定義的鹽'.encode('utf8'))
        # # 動態加鹽(干擾項)  當前時間 使用者名稱的部分 uuid(隨機字串(永遠不會重複))
        # import time
        # res1 = str(time.time())
        # md5.update(res1.encode('utf8'))
        # # 真實資料
        # md5.update(b'hellojason123')

        # # 3.獲取加密之後的密文資料(沒有規則的一串隨機字串)
        # res = md5.hexdigest()
        # print(res)  # 4326fe1839d7c4186900eb2b356d4f8a

        """
        在IT網際網路領域 沒有絕對的安全可言 只有更安全
            原因在於網際網路的本質 就是通過網線(網絡卡)連線計算機
        """


        # 6.校驗檔案一致性
        """
        檔案不是很大的情況下 可以將所有檔案內部全部加密處理
        但是如果檔案特別大 全部加密處理相當的耗時好資源 如何解決???
            針對大檔案可以使用切片讀取的方式 
        """
        # import hashlib
        # md5 = hashlib.md5()
        # with open(r'a.txt','rb') as f:
        #     for line in f:
        #         md5.update(line)
        # real_data = md5.hexdigest()
        # print(real_data)  # 29d8ea41c610ee5d1e76dd0a42c7e60a

        # with open(r'a.txt','rb') as f:
        #     for line in f:
        #         md5.update(line)
        # error_data = md5.hexdigest()
        # print(error_data)  # 738a56b49f24884ba758d1e4ab6ceb74
        # import os
        # # 讀取檔案總大小
        # res = os.path.getsize(r'a.txt')
        # # 指定分片讀取策略(讀幾段 每段幾個位元組)  10   f.seek()
        # read_method = [0,res//4,res//2,res]

        """
        位元流技術
        斷點續傳技術
        """