python模拟mysql password密码生成算法

我的密码保存在mysql中是经过mysqlpassword进行加密的,那么在django中如何加吗以及如何在登录验证的时候校验密码呢,

通过网站查找资料研究mysql password的加密算法,总结下下面的小脚本,python实现,一个是mysql老版的加密方式;一个是

mysql新版的加密算法。具体的测试和代码如下:

[root@Git ~]# python test.py hello
70de51425df9d787
*6B4F89A54E2D27ECD7E8DA05B4AB8FD9D1D8B119
[root@Git ~]# more test.py
#!/usr/bin/python
def mysql_hash_password(password):
    nr = 1345345333
    add = 7
    nr2 = 0x12345671

    for c in (ord(x) for x in password if x not in (' ', '\t')):
        nr^= (((nr & 63)+add)*c)+ (nr << 8) & 0xFFFFFFFF
        nr2= (nr2 + ((nr2 << 8) ^ nr)) & 0xFFFFFFFF
        add= (add + c) & 0xFFFFFFFF

    return "%08x%08x" % (nr & 0x7FFFFFFF,nr2 & 0x7FFFFFFF)

import hashlib

def mysql_password(str):
        """
	Hash string twice with SHA1 and return uppercase hex digest,
	prepended with an asterix.

	This function is identical to the MySQL PASSWORD() function.
        """
	pass1 = hashlib.sha1(str).digest()
	pass2 = hashlib.sha1(pass1).hexdigest()
        return "*" + pass2.upper()
if __name__ == '__main__':
    import sys
    if len(sys.argv) != 2:
        print >> sys.stderr , 'Python Implementation of MySQL\'s old password hash'
        print >> sys.stderr , 'Usage: %s password' % sys.argv[0]
        sys.exit(1) 
    print mysql_hash_password(sys.argv[1])
    print mysql_password(sys.argv[1])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值