python数据库密码如何加密_如何在数据库中存储加密后的密码?

本文通过一个实例展示了如何使用Python的hashlib和sqlite3模块,将用户输入的明文密码加密后存储到SQLite数据库中,以提高安全性。在用户登录时,将采用相同的散列算法对输入的密码进行加密比较,确保了密码的安全存储和验证。
摘要由CSDN通过智能技术生成

在我们日常开发运维平台中,如果公司对安全要求比较高,一般数据库中都存储的都是用户加密后的密码,这样即使某些人侥幸得到数据库权限,也无法得知用户明文密码,这主要是从安全角度来考虑的,那如何将用户输入的明文密码转为加密后的密码呢? 我们今天这篇文章就给出一个小例子,让大家看看如何实现,按惯例,我们先上代码:

#!/usr/local/env python

import sys

import hashlib

import getpass

import sqlite3

def user_info():

info = []

user_name = raw_input('Please Enter a User Name: ')

password = hashlib.sha224(getpass.getpass('Please Enter a Password: ')).hexdigest()

info.append((user_name, password))

return info

def main():

info = user_info()

try:

conn = sqlite3.connect('pub.db')

cu = conn.cursor()

sql = '''

insert into USER values (?,?)

'''

cu.execute(sql, info[0])

conn.commit()

except:

sys.exit('error!')

if __name__ == "__main__":

main()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#!/usr/local/env python

importsys

importhashlib

importgetpass

importsqlite3

defuser_info():

info=[]

user_name=raw_input('Please Enter a User Name: ')

password=hashlib.sha224(getpass.getpass('Please Enter a Password: ')).hexdigest()

info.append((user_name,password))

returninfo

defmain():

info=user_info()

try:

conn=sqlite3.connect('pub.db')

cu=conn.cursor()

sql='''

insert into USER values (?,?)

'''

cu.execute(sql,info[0])

conn.commit()

except:

sys.exit('error!')

if__name__=="__main__":

main()

脚本逐行解释, 前几行是导入的标准模块,hashlib模块作用是生成密码散列和消息摘要,getpass模块是用户输入密码,不在控制台回现,sqlite3模块是python与sqlite库交互的接口。脚本再往下是定义了2个函数,user_info()函数是得到用户输入信息,main()函数将用户输入的信息加密入库,hashlib.sha224是单向散列算法,sha是安全散列算法缩写(Secure Hash Algorithm),另外还有SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种散列算法(大家都可以试试,直观印象是数字越大加密后得到的字符串越长),hexdigest()函数返回字符串的摘要,并且摘要是一系列16进制数字。其它行就不说了,都是之前我们见过的内容,这样在数据库中存储的就是加密后的密码了,这篇就到这里了,那现在我们已经有了存储用户信息的库,那下篇我们来看看如何对用户的输入的用户名和密码进行验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值