登录与注册的加密算法分析

登录与注册的加密算法分析

算法目的
  • 提供固定的 秘钥明文 能够产生不同的密文摘要
  • hamc 算法 大概流程是 使用一个秘钥 对明文进行两次散列操作得到密文摘要
  • 哈希(散列)函数
    • MD5
    • SHA1
    • SHA256
注册
  • 向服务器请求一个随机的秘钥
  • 把注册的密码进行 md5.hmac(hamc使用md5的散列函数来操作字符)加密 : md5.hmac(key,message) ==> 密文摘要(key : 秘钥 , message : 明文) : md5.hmac密文摘要
  • 把摘要提交到服务器,同时服务器把 该 秘钥md5.hmac密文摘要 持久化到数据库
登录
  • 客户端向服务器请求秘钥(注册时候存储的秘钥)

  • 在用户提交数据的时候对密码进行加密 :
    md5.hmac(key , pwd) ==> 子摘要
    md5.hamc(key , (子摘要 + ‘当前提交时间’)) ==> 总摘要

  • 当服务器接收到总摘要消息的时候处理流程 :

    • 取出 秘钥 key , 存储的密文摘要 pwdDigest
    • 根据以下公式计算两段密文摘要 :
    md5.hamc(key , '当前提交时间' + pwdDigest) ==>目的摘要1
    md5.hamc(key , '当前提交时间 + 1(分钟)' + pwdDigest) ==>目的摘要2
    
    • 如果用户提交的 总摘要 == 目的摘要1 || 总摘要 == 目的摘要2 为密码正确
这样做的好处
  • 注册只有一次, 提交 关键摘要 的操作只有一次,因此受到拦截数据的几率很少

  • 在登录的时候,由于加密使用了系统时间,因此这样可以保证密码摘要的动态性,而且服务器只会辨认一分钟以内的密文摘要,这样做,就算用户提交数据给拦截了,也很少有时间提供给黑客达到模仿正确登录请求

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是我提供的一个tkinter+mysql登录界面系统算法实现及分析: 1. 连接数据库 首先需要连接MySQL数据库并创建游标对象,用于后续的SQL语句执行。连接MySQL数据库可以使用pymysql模块,具体实现如下: ``` import pymysql # 连接MySQL数据库 db = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test') # 创建游标对象 cursor = db.cursor() ``` 2. 用户登录 用户登录算法主要包括获取用户输入的用户名和密码、查询数据库中是否存在该用户及密码是否匹配等步骤。具体实现如下: ``` def login(): # 获取用户输入的用户名和密码 username = username_entry.get() password = password_entry.get() # 查询数据库中是否存在该用户 query = "SELECT * FROM user WHERE username = '%s'" % username cursor.execute(query) result = cursor.fetchone() # 判断密码是否匹配 if result and result[2] == password: # 登录成功,跳转到主界面 main_window() else: # 登录失败,弹出错误提示 messagebox.showerror('Error', 'Invalid username or password') ``` 3. 用户注册 用户注册算法主要包括获取用户输入的用户名和密码、密码加密以及将用户信息插入到数据库中等步骤。具体实现如下: ``` def register(): # 获取用户输入的用户名和密码 username = username_entry.get() password = password_entry.get() # 密码加密 md5 = hashlib.md5() md5.update(password.encode('utf-8')) password_md5 = md5.hexdigest() # 将用户信息插入到数据库中 insert = "INSERT INTO user(username, password) VALUES ('%s', '%s')" % (username, password_md5) cursor.execute(insert) db.commit() # 弹出注册成功提示 messagebox.showinfo('Success', 'Registration successful') ``` 4. 主界面功能 主界面的各种功能需要编写相应的SQL语句并通过游标对象执行。例如,查询用户信息的算法实现如下: ``` def query(): # 查询所有用户信息 query = "SELECT * FROM user" cursor.execute(query) result = cursor.fetchall() # 将结果显示在界面上 result_text.delete(1.0, END) for row in result: result_text.insert(END, 'ID:{} Username:{} Password:{}\n'.format(row[0], row[1], row[2])) ``` 5. 算法分析 以上算法主要涉及到了数据库连接、SQL语句执行、密码加密等操作。其中,密码加密采用了MD5算法,可以有效提高密码的安全性。SQL语句执行需要通过游标对象实现,而游标对象的执行效率较高,可以快速地执行SQL语句并返回结果。因此,该算法在实现功能的同时,也具有较高的执行效率和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值