python模拟mysql password密码生成算法
2013-12-24 23:19
197 查看
我的密码保存在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])
通过网站查找资料研究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])
相关文章推荐
- 【学习笔记】Python网络编程(三)利用socket模拟ssh协议
- python终端模拟工具pexpect
- Python模拟Web Fetion登录解析
- Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
- python 模拟登录i
- Micropython Turnipbit自动窗帘模拟系统
- Python捕捉和模拟鼠标事件的方法
- Python操作MySQL模拟银行转账
- python selenium的模拟点击,模拟滑动等操作
- python+chrome+Selenium模拟手机浏览器
- python3.0 模拟用户登录,三次错误锁定
- Python3.X登录模拟CSDN,获取文章列表
- python模拟浏览器登录人人网,并使用代理IP和发送表单数据
- 如何利用python模拟登录(附源码)
- Python爬虫学习日记:模拟带有cookie的登陆
- Python练习项目——模拟ATM机登录系统
- 【Python之旅】第四篇(四):基于面向对象的模拟人生游戏类
- [置顶]定向爬虫 - Python模拟新浪微博登录
- Python入门:模拟登录(二)或注册之requests处理带token请求
- Python模拟用户登陆网站