【Django】MD5码加密实现

1.编写加密文件 encrypt.py ,这里盐可以直接使用 settings 配置文件里的 'SECRET_KEY':

from django.conf import settings
import hashlib

def md5(data_string):
    obj = hashlib.md5(settings.SECRET_KEY.encode('utf-8'))  # 加盐
    obj.update(data_string.encode('utf-8'))
    return obj.hexdigest()

加盐:指的是在哈希过程中添加额外数据以增强哈希值的安全性,这里的 'settings.SECRET_KEY' 就是用作盐的一种方式。

加盐的目的:

  • 增加唯一性:即使两个不同的输入字符串经过哈希处理后得到了相同的哈希值,使用盐(如 'SECRET_KEY')可以确保这两个字符串的哈希值不同。这样,即使有人知道了原始数据的哈希值,没有盐的情况下,他们也无法轻易找到原始数据。
  • 抵抗彩虹表攻击:彩虹表是一种预计算哈希值的攻击手段,通过使用随机生成的盐值,可以避免攻击者使用这些表来快速破解哈希值。
  • 增强安全性:在某些情况下,简单地使用数据的哈希值是不可取的,特别是当涉及敏感数据时。通过结合盐值如 'SECRET_KEY'),可以增加破解的复杂性和时间成本。

2.定义一个 django 表单类,用来演示加密效果:

from django import forms
from app01.utils.bootstrap import BootStrapModelForm
from django.core.exceptions import ValidationError
from app01.utils.encrypt import md5

class AdminModelForm(BootStrapModelForm):
    confirm_password = forms.CharField(
        label="确认密码",
        widget=forms.PasswordInput,  # 密码不显示
    )

    class Meta:
        model = models.Admin
        fields = ["username", "password", "confirm_password"]
        widgets = {
            "password": forms.PasswordInput
        }

    # 密码加密(MD5码)
    def clean_password(self):
        pwd = self.cleaned_data.get("password")
        return md5(pwd)

    def clean_confirm_password(self):
        pwd = self.cleaned_data.get("password")
        confirm = md5(self.cleaned_data.get("confirm_password"))
        if confirm != pwd:
            raise ValidationError("密码不一致")
        # 返回什么,此字段以后保存到数据库就是什么
        return confirm

这里密码我输入的是 '12345',可以看到已添加到表单中去了:


可以看到,密码已加密成功:

到数据库中查看,也可以看到密码已加密成功:

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值