使用bcrypt登录原理简述

BCrypt 加密原理在于使用一个随机字符串(salt)与用户密码相结合生成 hash 码。登录时,通过匹配重新生成的 hash 码与数据库中存储的 hash 值来验证密码的正确性。
bcypt在加密时原理简单讲就是用一个随机的字符串(salt)+注册的密码,进行处理生成一个hash码,在登录解密时底层原理就是获取到数据库里密码的随机字符串部分(salt),加上输入的登录密码再生成一个hash,之后与数据库中的密码进行比对.
### 如何在 QT 中使用 bcrypt 实现密码哈希 为了在 Qt 应用程序中实现基于 `bcrypt` 的密码哈希功能,通常会借助 Python 或 C++ 来完成这一操作。对于 Qt 开发环境而言,如果采用的是 PyQt 或 PySide,则可以直接利用 Python 生态中的 `bcrypt` 库;而如果是纯 C++ 项目,则可能需要寻找合适的 C/C++ 版本的 bcrypt 库。 #### 使用 Python (PyQt/PySide) 当开发基于 Python 的 Qt 应用时,可以通过安装并导入 `bcrypt` 库来轻松地集成 bcrypt 哈希机制: ```bash pip install bcrypt ``` 接着,在应用程序代码里引入该模块并对用户输入的密码执行如下处理: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QLabel import bcrypt class PasswordHasher(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.password_input = QLineEdit(self) hash_button = QPushButton('Hash', self) check_button = QPushButton('Check', self) self.result_label = QLabel('', self) hash_button.clicked.connect(self.on_hash_click) check_button.clicked.connect(self.on_check_click) layout.addWidget(QLabel('Enter your password:', self)) layout.addWidget(self.password_input) layout.addWidget(hash_button) layout.addWidget(check_button) layout.addWidget(self.result_label) self.setLayout(layout) def on_hash_click(self): entered_password = str.encode(self.password_input.text()) hashed = bcrypt.hashpw(entered_password, bcrypt.gensalt()) self.result_label.setText(f'hashed: {str(hashed)}') def on_check_click(self): entered_password = str.encode(self.password_input.text()) stored_hashed_password = b'$2b$12$KIVzF7j9X8vGZ0fUOyLqNOkPmYRJpQWcDgH4eTtVwB3a6xuA5oCWi' if bcrypt.checkpw(entered_password, stored_hashed_password): self.result_label.setText("Match!") else: self.result_label.setText("No match") if __name__ == '__main__': app = QApplication(sys.argv) widget = PasswordHasher() widget.show() sys.exit(app.exec_()) ``` 这段代码展示了如何创建一个简单的 GUI 界面用于展示 bcrypt 密码散列过程[^2]。 #### 对于原生 C++ Qt 项目 针对完全由 C++ 编写的 Qt 工程来说,由于官方并没有提供直接支持 bcrypt 的 API,因此开发者可以选择第三方库如 OpenBSD 提供的原始 bcrypt 函数或者是其他开源项目的实现方式。不过需要注意的是,这些外部依赖项可能会增加构建配置复杂度,并且应当仔细评估其安全性和兼容性。 一种替代方案是调用系统命令行工具或者编写独立的服务端脚本来负责实际的加密工作,客户端仅需发送请求接收响应即可。这种方式能够有效隔离业务逻辑与敏感运算,同时也便于维护更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值