国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

django后臺進行加密手機號字段,加密存儲,解密顯示

這篇具有很好參考價值的文章主要介紹了django后臺進行加密手機號字段,加密存儲,解密顯示。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

django后臺進行加密手機號字段,加密存儲,解密顯示,django,數(shù)據(jù)庫,sqlite
django后臺進行加密手機號字段,加密存儲,解密顯示,django,數(shù)據(jù)庫,sqlite

django后臺進行加密手機號字段,加密存儲,解密顯示,django,數(shù)據(jù)庫,sqlite

需求:
1 :員工在填寫用戶的手機號時,直接填寫,在django后臺中輸入
2:當員工在后臺確認要存儲到數(shù)據(jù)庫時,后臺將會把手機號進行加密存儲,當數(shù)據(jù)庫被黑之后,手機號字段為加密字符
3:員工在后臺中進行查看客戶手機號時,需要正常顯示,非加密狀態(tài)
4:直接把公鑰和私鑰存放到代碼里面,不要額外讀取存儲公鑰私鑰
5:為何有該需求,請參考《個人信息保護法》

1安裝加密插件

pip install rsa

該命令將會安裝(2024年1月17日)
1:插件名=pyasn1,版本=pyasn1-0.5.1
2:插件名=rsa,版本=rsa-4.9

2生成加密文件

方法一

請自行創(chuàng)建a.py文件,運行以下代碼 python a.py

# 方法一
# pip install rsa

import rsa

# 生成公鑰和私鑰
# 使用rsa插件生成2048位加密
# 公鑰 public_key
# 私鑰 private_key
(public_key, private_key) = rsa.newkeys(2048)


# # # 將公鑰和私鑰保存到本地文件
# 導出公鑰和私鑰到文件
with open('public_key.pem', mode='wb') as public_file:
    public_file.write(public_key.save_pkcs1('PEM'))

with open('private_key.pem', mode='wb') as private_file:
    private_file.write(private_key.save_pkcs1('PEM'))

方法二

安裝cryptography生成加密,會比僅用rsa快一點

pip install cryptography
#安裝cryptography會自動安裝cryptography,cffi,pycparser
from Crypto.PublicKey import RSA  
from Crypto.Cipher import PKCS1_OAEP  
import binascii  
  
# 生成RSA密鑰對  
key = RSA.generate(2048)  
public_key = key.publickey()  
  
# 將公鑰和私鑰保存到本地文件  
with open('public_key.pem', 'wb') as f:  
    f.write(public_key.export_key())  
with open('private_key.pem', 'wb') as f:  
    f.write(key.export_key())

這時已經(jīng)在a.py的相同路徑中創(chuàng)建了公鑰和私鑰的文件

#生成私鑰如下
# -----BEGIN RSA PRIVATE KEY-----
# MIIEqQIBAAKCAQEAjItx/es/uoRA8OsH/1S5l6jYX/lTjJVsm3RId169zZTMwkq1
# 8sxFM1v/k1pLeHXokoTa5h6VWFQBgdNV7siGF5Jesrp3cDJQawj32Um31cwBiPGw
# pQlW8q68uz4jbCu9AGFOPQMQrVF3KTNHv8YFJt83Ug5ByxGbpoopA3cZJi1la0LM
# A2QFHgolgGooiIbn8+MP6B8ovk05aKnZJwQvthIp7F+73CEEfC0alLkn5+cPMD+Y
# 5zuCCUwVKZWpQierQIy6Shxu/gQ1zoB0Jnycl2pTR7hJ4hiWxKSz8aPzv5h4+ZGh
# 2Ou3FdaFTnL85fLbrSsugqS8bGV6teR4QPoVqwIDAQABAoIBAGD4baRGxmfIjI4t
# fA0dxhfv9aryekULbC4uIznJcqf/vO9pYPSvICf5l/NxX5UztU4ywF36SAzzmT6c
# NDRWwr5MzW3/3hzZekb/nxKbHG41HfIA4GJeeVFkYu/GReaCnxs+CB9sl/sdtFwG
# 98BHvpI9fQvurlKQSRYIXaoeiWYzsBKxBq4rCgpcgd3wYqhu9QrlhLbUDfF0Vr97
# UK6sqckJ01rV1UFSNK5UpBGRNQ/UrLKYjxxIYnDqjTf7UofOzuaeLfTMHy5+o4mB
# Pkh911h/pC/cCePlhcvz07GGyslntscoi/HCK5TLdaFBkeyVttN9Agxxl3siG6ux
# 1rQ2r1ECgYkAun5oomGfEo9Tmxr6TlDqwg3aeD62vgVxjJ5DRHJ832nsfA+VI9uQ
# iD951AntPURLQdAFIr2W6146KyIBPGo/kS/cT29gbutDI9ws90AT7KySBs2E2jjH
# 8hUxrXSdxVZTEdWFpkRUSj9i+N49uoT4HLHncgWJ1BkXYibTG5QcLyaYq39AL2GO
# ZwJ5AMDs+y5OSf4hgUNUYGl3J2X3RG8lpPG/kHKn6onekWni7WIEr6bD8fAPaptv
# 5XkYYsWxB9iG7MupCnzTX4IONy9ALs0UoY9STkPWV4l9qoOMatH9rW1jyRQD28Tp
# qNuAGlYBPQFaqv7I5QhJ6Wqe94tGMWfX+2rsHQKBiQCz1/NPpJSicVVO3lVD8QRy
# 3qkwDEpuNRGraXO1LjL9wEgt21kXm0VmHtB9ipUd4B4y+Uf6mJpRoCy4K7LFcDCc
# 8mqir+VvEbFNg6ZZSZHtSv4HUWosh1VKPuYJP8xl4Tl6mU6paHtgnn/zP16H4HLk
# OSvY6T5hK1FBde9fSRVk4vOXbr+W8Z1BAnhgzwoD5HkwsrNgi9iNU6NLgVavx14L
# iSr8vdHtOOgTEDI6O0vBDRY8dh/yu6WUrG3z8a+UMbBlSf/fP1nvsx5x8W0Kr82a
# U5y+YbIvZgXIWQ/JK9h4yde+2WjQWMfIzXFpstlf8pVXoIt9K0mbnQVut9xW1YRt
# 1OkCgYgkkw7Tlf0ASZ5mkpy07MplV6h2umoP2IgDtZWzVJBqI1fbvKuqHgCr/0w+
# wlWF/fOGnKdjIO1EWUJ6RRYC10V57iSHUhncv0X0OxlbedFtuo0UX0FfpYbJNkzU
# PhQ4uT1geCltZZwRMAMSKERUErCRKkwuxOIUx9bZ4NsXABhDzegcNh66nimE
# -----END RSA PRIVATE KEY-----

# 生成公鑰如下
# -----BEGIN RSA PUBLIC KEY-----
# MIIBCgKCAQEAjItx/es/uoRA8OsH/1S5l6jYX/lTjJVsm3RId169zZTMwkq18sxF
# M1v/k1pLeHXokoTa5h6VWFQBgdNV7siGF5Jesrp3cDJQawj32Um31cwBiPGwpQlW
# 8q68uz4jbCu9AGFOPQMQrVF3KTNHv8YFJt83Ug5ByxGbpoopA3cZJi1la0LMA2QF
# HgolgGooiIbn8+MP6B8ovk05aKnZJwQvthIp7F+73CEEfC0alLkn5+cPMD+Y5zuC
# CUwVKZWpQierQIy6Shxu/gQ1zoB0Jnycl2pTR7hJ4hiWxKSz8aPzv5h4+ZGh2Ou3
# FdaFTnL85fLbrSsugqS8bGV6teR4QPoVqwIDAQAB
# -----END RSA PUBLIC KEY-----

3安裝讀取加密插件

pip install cryptography

4:在django項目中應用

models.py文件中代碼如下

# -------------------------------------------------------------------------------------
# 手機號加密插件
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
import base64

# -------------------------------------------------------------------------------------
class Order(models.Model):

    id = models.BigAutoField(primary_key=True, unique=True, verbose_name='訂單id', )
    shoujihao = models.TextField(verbose_name='客戶手機號碼', max_length=30000, blank=True)
    # -------------------------------------------------------------------------------------
    # 手機號解密
    def get_shoujihao(self):
        # 1:獲取到數(shù)據(jù)庫中的字符串 a
        # 2:把字符串轉(zhuǎn)換成字節(jié)類型 b
        # 3:對字節(jié)b進行解密為 c
        # 4:返回c
        if len(self.shoujihao)>=20:
            shoujihao1=self.shoujihao
            shoujihao1 = base64.b64decode(shoujihao1)

            # 讀取私鑰文件
            private_key="""-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAp4vQEgBPcCy09xmJDVFxjuYk+USqBNgUxIHF4+E9Vot1rDWU
ncFSIERsEqTq9wIlVsgiVtRJ/0FxHLIgZPlFvRRUh0JjxkpddYAK+EKK2gySoiE8
kUwomeYpILg/pAxtSoRBbUqtE/sTQZM2sOM07FYrz/Q8oVBN1Au3/LwOOAFf6R/5
lFBJCutS/wAuvydwxlTjuNp4PF4Tc65qaF+35VE0IvcOByahAPRqI4TqFb/UOidJ
1Xc4HPIwmtkeYYRyqDgZun2tdQ0iQm7A7lN9TkP6qoKbTRI9ySoBHs4SJXy8r63r
xPRgkjEsVR/hcsZAt7LHjNnZKWd8b1yi0AO56QIDAQABAoIBABya/xUXtvheta3r
ju32bgY5Dm59le6aSt9rDbOUuPF+AYL7qepOP5yROgdr3075b5ETveMnvxOE45BD
7Ep5EbpQzobCY8EO4MqHKDhPOiA03dMvDAV9pH/0Hyj+NCVo1r8OehI0Gf1LlHPR
c9i7DgXcx4GrgC+Fg6g0sP7GR8IxWKkT1rHNWWjqaWh3HlBbJhdrZpxjKbCqTjKM
ImrgPKDi1An0NNHJyQe42XNgmOAMoCRUvP8skLveyYDQ2+LCeTjnmOD0WTMlwlt3
ulu4MjKh/wMAj7dxguonK97C01n0utP+k0KdkOP+rBNazEF2roY2FrcYr+n1MgTs
QDECG1JVtYVP1Tuyb3pgoQKBgC9SV/Ft1K4T8e/AiTrF07SCn8BEZOZ0BDI69+lB
cYh1CPXBt1M0a+T+M1mwCVWxYrapfVismesnIiVQO+n2AehdDyvE1krkHRTQCUYD
PkM7efPek9WBWHy6dbEPJ+mMDs1P5mVOV7MJEGQMtE01BO/KoQ74fePrbaFDwHkU
nzuBAoGBAJIpUUmDMnkMzr5HPw1rtZEjkR0k+EQXU3jeaKA1TjqRoli1ApUpBB11
ekDfPc/BqzRSIkACEijwdnf7NhQveCAiE+aj5NiGkwS/zjX9S96v0qK5SFil6y+c
EXv1GMN54aCmiHWBGq86tOKjV9M4hnlVpuRJPeHi52nAyHpJfmB7
-----END RSA PRIVATE KEY-----"""
            key = serialization.load_pem_private_key(private_key.encode(), password=None, backend=default_backend())
            decrypted_data = key.decrypt(shoujihao1, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                                                                      algorithm=hashes.SHA256(), label=None))
            # decrypted_data 的類型為字節(jié)
            decrypted_data=decrypted_data.decode('utf-8')
            # decrypted_data.decode()之后的類型為字符串
            shoujihao1=decrypted_data
            print("類型")
            print(type(decrypted_data))
            print(decrypted_data)

            # 打印解密后的消息
            color_code = 'green'
            return format_html('<span style="color:{};">{}</span>', color_code, shoujihao1)
        else:
            color_code = 'green'
            return format_html('<span style="color:{};">-</span>', color_code, )

    get_shoujihao.short_description = '手機號'

admin.py文件中代碼如下文章來源地址http://www.zghlxwxcb.cn/news/detail-803180.html


# -------------------------------------------------------------------------------------
# 手機號加密插件
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
import base64

# -------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------
class Order_salesmanAdmin(admin.ModelAdmin):
    # -------------------------------------------------------------------------------------
    # 手機號加密顯示 和手機號顯示
    # 設置錄入后臺中展示的數(shù)據(jù)字段
    list_display = ['id',
                    'shoujihao', 
                    'get_shoujihao',
                    ]

    def save_model(self, request, obj, form, change):
        if not obj.pk:
            obj.userid = UserProfile.objects.get(user=request.user)
            # 客戶手機號加密存儲
            shoujihao1 = obj.shoujihao
            if len(shoujihao1) == 11:
                # 1:在admin后臺中,允許用戶輸入的是字符串類型的數(shù)據(jù)
                # 2:加密之后得到的是字節(jié)類型,
                # 3:把字節(jié)類型的編碼為utf-8的字符串類型 存儲在數(shù)據(jù)庫中

                # 讀取公鑰文件
                public_key = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp4vQEgBPcCy09xmJDVFx
juYk+USqBNgUxIHF4+E9Vot1rDWUncFSIERsEqTq9wIlVsgiVtRJ/0FxHLIgZPlF
TkP6qoKbTRI9ySoBHs4SJXy8r63rxPRgkjEsVR/hcsZAt7LHjNnZKWd8b1yi0AO5
6QIDAQAB
-----END PUBLIC KEY-----"""

                key = serialization.load_pem_public_key(public_key.encode(), backend=default_backend())
                encrypted_data = key.encrypt(shoujihao1.encode(),
                                                padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
                                                            algorithm=hashes.SHA256(), label=None))
                # 加密后的數(shù)據(jù)類型 encrypted_data <class 'bytes'> 字節(jié)類型
                encrypted_data=base64.b64encode(encrypted_data).decode('utf-8')

                # decode為utf-8之后的數(shù)據(jù)類型  為字符串類型,這樣才可以在字符字段中存儲
                # print("decode之后的數(shù)據(jù)類型")
                # print(type(encrypted_data))
                # print(encrypted_data)

                obj.shoujihao =encrypted_data
            # -------------------------------------------------------------------------------------

        if not change:
            obj.userid = UserProfile.objects.get(user=request.user)
        else:
            obj.updated_userid = UserProfile.objects.get(user=request.user)
        obj.save()
        super().save_model(request, obj, form, change)

    # -------------------------------------------------------------------------------------

到了這里,關于django后臺進行加密手機號字段,加密存儲,解密顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Mysql】不要用int類型存儲11位手機號

    今天在做添加數(shù)據(jù)的時候,發(fā)現(xiàn)手機號存儲錯誤,報錯信息是: Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \\\'f_phone\\\' at row 1; Data truncation: Out of range value for column \\\'f_phone\\\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncatio

    2024年02月08日
    瀏覽(12)
  • 如何通過QQ進行手機號溯源

    如何通過QQ進行手機號溯源

    Q綁在線查詢: http://2k.24kz.cn/ 如果上述的網(wǎng)址查詢不到信息的號。會提示說沒有找到 可能說明數(shù)據(jù)庫中并無該qq號所綁定手機號的信息 開始正題: 第一步:點擊添加賬號,復制其QQ賬號進入點擊忘記密碼,便可查看其手機前3位以及后兩位 輸入賬號 下一步 第二步:使用查詢

    2024年02月06日
    瀏覽(21)
  • 微信小程序 - 2023 年最新授權獲取用戶手機號詳細教程,完美解決 getPhoneNumber 獲取不到 code 的問題(老項目使用手機號快速驗證組件,打印授權后沒有code字段,拿不到cod)

    微信小程序 - 2023 年最新授權獲取用戶手機號詳細教程,完美解決 getPhoneNumber 獲取不到 code 的問題(老項目使用手機號快速驗證組件,打印授權后沒有code字段,拿不到cod)

    由于官方修改了 “獲取用戶手機號” 規(guī)則,導致網(wǎng)上幾乎所有教程全部失效,本文來做最新詳細教程。 2023年8月往后(官方廢棄了原來 “免費” 獲取用戶手機號的相關方法 API,導致了大量小程序原獲取手機號的方式失效報錯),本文是最新微信小程序 “收費” 獲取用戶手

    2024年02月17日
    瀏覽(200)
  • 小程序js(正則表達式):文本框?qū)κ謾C號進行標準化規(guī)范

    ? /^1[3456789]d{9}$/ 是一個正則表達式,用于匹配手機號碼的格式。 具體解釋如下: / ?是正則表達式的開始和結束標記。 ^ ?表示匹配字符串的開頭。 1 ?表示要匹配的字符串必須以數(shù)字 1 開頭。 [3456789] ?表示下一位的數(shù)字必須是 3、4、5、6、7、8 或 9 中的一個。 d ?表示匹配

    2024年02月05日
    瀏覽(27)
  • 2022.9.17 vue、element-ui實現(xiàn)登錄獲取手機驗證碼,進行手機號校驗、驗證碼CD60秒

    2022.9.17 vue、element-ui實現(xiàn)登錄獲取手機驗證碼,進行手機號校驗、驗證碼CD60秒

    1、直接點擊,不為空校驗 2、輸入手機號格式不正確時 3、獲取完驗證碼進行讀秒 三、vue 1、進行手機號校驗關鍵在對單個手機號輸入框進行校驗,需要使用到validateField對部分表單字段進行校驗,valid是校驗完的提示信息,當valid為空時代表校驗成功 2、讀秒和設置禁用,在校

    2024年02月11日
    瀏覽(32)
  • 注意:小程序獲取手機號要收費了——手機號快速驗證

    注意:小程序獲取手機號要收費了——手機號快速驗證

    自2023年8月26日起,小程序獲取手機號組件將需要 付費使用 。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 新版本組件不再需要提前調(diào)用wx.login進行登錄。 代碼示例 返回參數(shù)說明 code,動態(tài)令牌??赏ㄟ^動態(tài)令牌換取用戶手機號。使用方法詳情phonen

    2024年02月15日
    瀏覽(24)
  • 前端Vue手機號校驗及后端Java手機號校驗

    大家好! 今天給大家分享的知識是前端Vue手機號校驗以及后端Java進行手機號校驗,這兩個也是我在開發(fā)過程中遇到的問題,現(xiàn)在來給大家分享一下我的解決辦法。 在這里我寫了一個很簡單的小例子,大家可以參考一下,在此基礎上進行改進,代碼如下: 關鍵代碼都有注釋,

    2024年02月04日
    瀏覽(27)
  • 微信小程序:登錄授權,根據(jù)手機號獲取憑證,獲取用戶手機號

    1.微信小程序授權 controller 層代碼 wxUtils 工具類 2.微信小程序,用戶手機號獲取 微信小程序,根據(jù)code(code為手機號獲取憑證)獲取用戶加密手機號 獲取用戶手機號方法

    2024年02月14日
    瀏覽(28)
  • 微信小程序 - 實現(xiàn)手機號登錄--授權并獲取手機號保存至本地

    微信小程序 - 實現(xiàn)手機號登錄--授權并獲取手機號保存至本地

    微信官方文檔 | 獲取手機號 這是服務端的 ?這是我們前端獲取手機號需要給接口傳遞的兩個參數(shù) ? ?注意: 參數(shù)一: 獲取access_token需要用到小程序密鑰,這個需要從 服務端獲取 ,也就是需要請求后端接口獲取access_token,千萬不要將小程序密鑰寫在前端代碼中, 必須 要從服

    2024年02月03日
    瀏覽(34)
  • 微信小程序手機號授權獲取收費(手機號快速驗證組件)剩余次數(shù)查看購買

    微信小程序手機號授權獲取收費(手機號快速驗證組件)剩余次數(shù)查看購買

    登錄微信公眾平臺?,在管理---》付費管理下查看,已用次數(shù)和剩余次數(shù) 該能力旨在幫助開發(fā)者向用戶發(fā)起手機號申請,并且 必須經(jīng)過用戶同意后 ,開發(fā)者才可獲得由平臺驗證后的手機號,進而為用戶提供相應服務。 該能力與手機號實時驗證組件的區(qū)別為: 手機號快速驗證

    2024年02月22日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包