精华内容
下载资源
问答
  • django加密解密api

    2018-12-24 16:18:00
    分别给出了两个API,一个创造密码,一...于是赶紧试试: 首先,引入模块: ... from django.contrib.auth.hashers import make_password, check_password 生成密码: 1 2 ...

    分别给出了两个API,一个创造密码,一个验证密码正好满足需求。于是赶紧试试:

    首先,引入模块:

    1
    >>> from django.contrib.auth.hashers import make_password, check_password

    生成密码:

    1
    2
    >>> make_password( "qttc" , None , 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$H6HRZD4DDiKg$RXBGBTiFWADyw+J9O7114vxKvysBVP+lz7oSYxkoic0='

    这样就可以利用django自带的模块生成一组密码了,这个函数还有一个特点在于每次生成的密码还不一样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> make_password( "qttc" , None , 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$H6HRZD4DDiKg$RXBGBTiFWADyw+J9O7114vxKvysBVP+lz7oSYxkoic0='
     
    >>> make_password( "qttc" , None , 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$9l09rJd9MbQj$0tJVXBZFN6WwD/qI3WELdrRWOU7Inb7im3uB/np2PPg='
     
    >>> make_password( "qttc" , None , 'pbkdf2_sha256' ) = = make_password( "qttc" , None ,
    'pbkdf2_sha256' )
    False

    既然每次生成的密文都不一样,如何验证用户提交过来的明文与密文匹配呢?这就靠check_password去做了,check_password使用非常简单,只需要告诉它明文和密文它就会返回False or True验证结果

    1
    2
    3
    4
    5
    6
    >>> text = "qttc"
    >>> passwd = make_password(text, None , 'pbkdf2_sha256' )
    >>> print passwd
    pbkdf2_sha256$ 12000 $xzMLhCNvQbb8$i1XDnJIpb / cRRGRX2x7Ym74RNfPRCUp5pbU6Sn + V3J0 =
    >>> print check_password(text, passwd)
    True

    如果你不想每次都生成不同的密文,可以把make_password的第二个函数给一个固定的字符串,比如:

    1
    2
    3
    4
    >>> make_password(text, "a" , 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$a$5HkIPczRZGSTKUBa5uzZmRuAWdp2Qe6Oemhdasvzv4Q='
    >>> make_password(text, "a" , 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$a$5HkIPczRZGSTKUBa5uzZmRuAWdp2Qe6Oemhdasvzv4Q='

    只要是任意字符串就可以,并且可以多个。但不能为空,如:

    1
    2
    3
    4
    5
    >>> make_password(text, "", 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$KBcG81bWMAvd$aJNgfTOGFhOGogLSTE2goEM3ifKZZ1hydsuFEqnzHXU='
     
    >>> make_password(text, "", 'pbkdf2_sha256' )
    u 'pbkdf2_sha256$12000$fNv3YU4kgyLR$1FI8mxArDHt6Hj/eR72YCylGTAkW7YMWTj+wV4VHygY='

    为空的字符串就相当于:

    1
    make_password(text, None , 'pbkdf2_sha256' )

    至于make_password第三个参数是表示生成密文的一种方式,根据文档给出的大概有这几种:

    1. pbkdf2_sha256
    2. pbkdf2_sha1
    3. bcrypt_sha256
    4. bcrypt
    5. sha1
    6. unsalted_md5
    7. crypt

    以上例子我使用了第一种加密方式pbkdf2_sha256cryptbcrypt都需要另外单独安装模块,unsalted_md5就是常见的md5加密,如果对加密哈希算法不是很了解,那么就使用django最新的哈希算法pbkdf2_sha256就好

    转载于:https://www.cnblogs.com/CelonY/p/10169233.html

    展开全文
  • 我们知道HTTP是不安全的,所以在Django中,为了加密传输的数据(可以是密码、邮件、URL,类型可以是字符串、JSON、列表等等),可以使用itsdangerous进行加密解密数据。 如加密一个URL的参数。 加密前:...

    起因

    我们知道HTTP是不安全的,所以在Django中,为了加密传输的数据(可以是密码、邮件、URL,类型可以是字符串、JSON、列表等等),可以使用itsdangerous进行加密和解密数据。

    如加密一个URL的参数。

    使用itsdangerous可以很方便的让我们进行可逆的加密解密。

    安装

    pip install itsdangerous
    

    JSON Web Signature (JWS)

    文档:https://itsdangerous.palletsprojects.com/en/1.1.x/jws/

    1. 有过期时间的签名——TimedJSONWebSignatureSerializer

    未过期时可以解密

    In[1]:from itsdangerous import TimedJSONWebSignatureSerializer # 导入时间JSON签名序列化包
    In[2]:serializer1 = TimedJSONWebSignatureSerializer(secret_key='secret-key', expires_in=3600)    # 密钥和过期时间
    In[3]:info = {'content':9527}   # JSON,也可以是list类型、字符串类型
    In[4]:res = serializer1.dumps(info).decode() # 加密
    In[5]:res
    Out[5]: 'eyJhbGciOiJIUzUxMiIsImlhdCI6MTU5MDE1MDQ0MywiZXhwIjoxNTkwMTU0MDQzfQ.eyJjb250ZW50Ijo5NTI3fQ.SyIcvnG8yOHPA1teNhK3htc50WgWHJxA9-4-6DS0Zlk4Q4zWV5GKUAv2axmhio4ry0YdQls5Lc1eoIZDR8Cvdw'
    In[6]:serializer1.loads(res)    # 解密
    Out[6]: {'content': 9527}
    

    过期后解密会报错

    In[7]:serializer1 = TimedJSONWebSignatureSerializer(secret_key='secret-key', expires_in=1) # 1秒后过期
    In[8]:res = serializer1.dumps(info)
    In[9]:serializer1.loads(res)
    Traceback (most recent call last):
      File "D:\Python3.7.5\lib\site-packages\IPython\core\interactiveshell.py", line 3319, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-26-9a4867386e07>", line 1, in <module>
        serializer1.loads(res)
      File "D:\Python3.7.5\lib\site-packages\itsdangerous\jws.py", line 205, in loads
        date_signed=self.get_issue_date(header),
    itsdangerous.exc.SignatureExpired: Signature expired
    

    2. 可以加salt的签名——JSONWebSignatureSerializer

    什么叫salt呢?salt盐,其实就是由服务器随机生成的一个字符串,但是要保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(任意规则连接)生成散列值。当两个用户使用了同一个密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。

    ——《图解HTTP》

    提醒:

    1. HTTP传输时,为了使数据更安全,可以加salt(随机字符串)再散列。
    2. isdangerous中,盐其实就是一个附加字符串,可以区别用途:
    In[1]:from itsdangerous.url_safe import URLSafeSerializer
    In[2]:s1 = URLSafeSerializer("secret-key", salt="activate")   # 激活账户
    In[3]:s1.dumps(42)
    Out[3]:'NDI.MHQqszw6Wc81wOBQszCrEE_RlzY'
    In[4]:s2 = URLSafeSerializer("secret-key", salt="upgrade")    # 升级账户
    In[5]:s2.dumps(42)
    Out[5]:'NDI.c0MpsD6gzpilOAeUPra3NShPXsE'
    

    实际使用

    In[1]:from itsdangerous import JSONWebSignatureSerializer
    In[2]:s = JSONWebSignatureSerializer("secret-key", salt="Jc$@85idhhg1^&")
    In[3]:res = s.dumps({"x": 42})
    In[4]:res
    Out[4]:'eyJhbGciOiJIUzI1NiJ9.eyJ4Ijo0Mn0.ZdTn1YyGz9Yx5B5wNpWRL221G1WpVE5fPCPKNuc6UAo'
    In[5]:s.loads(res)
    Out[5]: {'x': 42}
    
    In[6]:s.dumps('1233145').decode()
    Out[6]: 'eyJhbGciOiJIUzUxMiJ9.IjEyMzMxNDUi.3bDpp2x73YsS4w6p_5Dg_4sgO49iJyWCjZsiFIdLczjawsxVVH99Rszkc9qixMfD1BxIxJmtQRcUJrimQrCKyg'
    In[7]:s.loads('eyJhbGciOiJIUzUxMiJ9.IjEyMzMxNDUi.3bDpp2x73YsS4w6p_5Dg_4sgO49iJyWCjZsiFIdLczjawsxVVH99Rszkc9qixMfD1BxIxJmtQRcUJrimQrCKyg')
    Out[38]: '1233145'
    

    还有其他的:

    展开全文
  • Django模型字段加密/解密您的数据,并加密保存至数据库中
  • django加密

    2020-11-03 17:50:48
    django做接口需要对重要信息进行加密解密。 # 需要安装pip install itsdangerous from itsdangerous import TimedJSONWebSignatureSerializer as Serializer # 自己设置的秘钥 secret_key = 'ihdskjghksdf4356fd' ...

    django做接口需要对重要信息进行加密和解密。

    # 需要安装pip install itsdangerous
    from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
    # 自己设置的秘钥
    secret_key = 'ihdskjghksdf4356fd'
    expires_in = None #如果是None默认3600,可以自己设置时间,单位(s),eg:3600
    
    
    class SecretOauth(object):
        def __init__(self):
            self.serializer = Serializer(secret_key=secret_key, expires_in=expires_in)
    
        # 加密
        def dumps(self, content_dict):
            token = self.serializer.dumps(content_dict).decode()
            return token
    
        # 解密
        def loads(self, token):
            try:
                content_dict = self.serializer.loads(token)
            except Exception as e:
                print(e)
                return None
            return content_dict
    
    
    if __name__ == '__main__':
        res = SecretOauth().dumps(content_dict={'session_key': 'kdshgjkhskjd8', 'openid': 'hdskghkj884j'})
        print('加密后:', res)
        import time
        time.sleep(2)
        res2 = SecretOauth().loads(res)
        print('解密后:', res2)
        print(res2.get('session_key'))
        print(res2['session_key'])
    
    

    源码说明的expires_in:
    在这里插入图片描述

    展开全文
  • python Django RSA 前台加密 后端解密,简单demo。
  • Django 内置的User类提供了用户密码的存储、验证、修改等功能,默认使用pbkdf2_sha256方式来存储和管理用的密码。 django通过setting.py文件中的PASSWORD_HASHERS来设置选择要使用的算法,列表的第一个元素 (即...
    Django 内置的User类提供了用户密码的存储、验证、修改等功能,
    默认使用pbkdf2_sha256方式来存储和管理用的密码。
    django通过setting.py文件中的PASSWORD_HASHERS来设置选择要使用的算法,
    列表的第一个元素 (即settings.PASSWORD_HASHERS[0]) 会用于储存密码, 
    所有其它元素都是用于验证的哈希值,它们可以用于检查现有的密码。
    意思是如果你打算使用不同的算法,你需要修改PASSWORD_HASHERS,来将你最喜欢的算法在列表中放在首位。
     
    一个settings中的Password_hashers看起来是这样的:
     
     
    PASSWORD_HASHERS = (
     
        'django.contrib.auth.hashers.PBKDF2PasswordHasher',
        'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
        'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
        'django.contrib.auth.hashers.BCryptPasswordHasher',
        'django.contrib.auth.hashers.SHA1PasswordHasher',
        'django.contrib.auth.hashers.MD5PasswordHasher',
        'django.contrib.auth.hashers.CryptPasswordHasher',
    )
    具体的密码生成以及验证实现
    from django.contrib.auth.hashers import make_password,check_password
    pwd='4562154'
    mpwd=make_password(pwd,None,'pbkdf2_sha256') # 创建django密码,第三个参数为加密算法
    pwd_bool=check_password(pwd,mpwd) # 返回的是一个bool类型的值,验证密码正确与否
    
    展开全文
  • 一、引言 最近在开发一个网站,使用的是Python2.7+Django,在向BAE发布的时候,数据库出现了异常,原因是BAE基础版提供的免费数据库中,不能插入含有...如果你要换成其他加密解密算法,请注意区分加密和解密。 R...
  • from itsdangerous import TimedJSONWebSignatureSerializer as Serializer serializer = Serializer('secretkey', 3600) info = {'confirm':1} res = serializer.dumps(info) res Out[7]: b'...
  • 以下设置,适用于python3.5及以前的 pip install pycrypto import base64 from Crypto.Cipher import AES from Crypto import Random BS = 16 key = "1234567890123456" pad = lambda s: s + (BS - len(s) % BS) ...
  • django加密签名

    2017-07-19 06:39:09
    Sing.py 中实现了一系列的加密方式:signer 和TimestampSigner一些加密可能需要首先在settings.py 中添加 SECRET_KEY 具体的使用方法可以使用如下: from django.core.signing import Signersigner = Signer()value...
  • 但是对于他的解密算法确实,能够将字符串或者字节类型的加密数据,都解密成字典类型。 from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from django.conf import settings # 生成一个...
  • Python Django之密码的加密解密

    万次阅读 2018-05-10 19:32:18
    通过django自带的类库,来加密解密很方便,下面来简单介绍下;导入包:from django.contrib.auth.hashers import make_password, check_password从名字就可以看出来他们的作用了。一个是生成密码,一个是核对密码。...
  • 在使用django的表单时发现自动加密 def signup(request): if request.method == 'POST': form = SignUpForm(request.POST) if form.is_valid(): print(form.data) print(form.save()) username = form.cleaned...
  • 主要介绍了Django中密码的加密、验密、解密操作,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,245
精华内容 898
关键字:

django加密解密