飞火流星2009 发表于 2025-2-11 09:51:12

[【Deepseek】小试牛刀,一段PB代码

1. 用户登录代码(PowerBuilder + SQL Server)
在用户登录时,通常不会直接存储用户的明文密码,而是存储密码的哈希值。这样即使数据库被泄露,攻击者也无法直接获取用户的密码。以下是一个简单的PowerBuilder代码示例,用于用户登录验证:

数据库表结构
假设有一个用户表 users,结构如下:

sql
复制
CREATE TABLE users (
    user_id INT PRIMARY KEY IDENTITY(1,1),
    username NVARCHAR(50) NOT NULL,
    password_hash NVARCHAR(128) NOT NULL -- 存储密码的哈希值
);
PowerBuilder 代码
powerbuilder
复制
// 假设用户输入的用户名和密码存储在变量中
string ls_username, ls_password
ls_username = sle_username.Text// 用户名输入框
ls_password = sle_password.Text// 密码输入框

// 计算密码的哈希值(例如使用SHA-256)
string ls_password_hash
ls_password_hash = Hash(ls_password, SHA256!)

// 查询数据库,验证用户名和密码哈希值
string ls_sql
ls_sql = "SELECT user_id FROM users WHERE username = ? AND password_hash = ?"

// 使用数据窗口或SQL语句执行查询
DECLARE cur_user CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_sql;
OPEN cur_user USING :ls_username, :ls_password_hash;

// 检查是否有匹配的用户
IF SQLCA.SQLCode = 0 THEN
    FETCH cur_user INTO :ll_user_id;
    IF SQLCA.SQLCode = 0 THEN
      MessageBox("登录成功", "欢迎, " + ls_username + "!")
    ELSE
      MessageBox("登录失败", "用户名或密码错误!")
    END IF
ELSE
    MessageBox("错误", "数据库查询失败!")
END IF

CLOSE cur_user;
说明
Hash() 函数用于计算密码的哈希值,具体实现取决于PowerBuilder的版本和库支持。

数据库中存储的是密码的哈希值,而不是明文密码。

使用参数化查询防止SQL注入攻击。

aftabalam08 发表于 2025-2-11 13:29:25

Good

smallanntse 发表于 2025-2-12 14:02:00

使用参数化查询防止SQL注入攻击。非常好,
deepseek比百毒的ai好啊

woyaodwn 发表于 2025-2-13 10:11:34

可以的

swimchen 发表于 2025-2-15 03:47:19

deepseek可以给出hash()函数的代码吗?

飞火流星2009 发表于 6 天前

本帖最后由 飞火流星2009 于 2025-2-17 16:19 编辑

swimchen 发表于 2025-2-15 03:47
deepseek可以给出hash()函数的代码吗?

在 PowerBuilder 中,Hash() 函数用于计算字符串的哈希值。哈希值是一个固定长度的字符串,通常用于数据校验、密码存储等场景。PowerBuilder 的 Hash() 函数支持多种哈希算法,例如 MD5、SHA-1、SHA-256 等。

以下是 Hash() 函数的基本用法和示例。

Hash() 函数语法

Hash ( string, algorithm )
参数说明:
string:要计算哈希值的字符串。

algorithm:哈希算法,支持以下值:

MD5!:MD5 算法(128 位哈希值)。

SHA1!:SHA-1 算法(160 位哈希值)。

SHA256!:SHA-256 算法(256 位哈希值)。

SHA384!:SHA-384 算法(384 位哈希值)。

SHA512!:SHA-512 算法(512 位哈希值)。

返回值:
返回一个字符串,表示计算出的哈希值。

示例代码
1. 计算字符串的 MD5 哈希值

string ls_input = "Hello, PowerBuilder!"
string ls_hash_value

ls_hash_value = Hash(ls_input, MD5!)
MessageBox("MD5 哈希值", ls_hash_value)
2. 计算字符串的 SHA-256 哈希值

string ls_input = "Hello, PowerBuilder!"
string ls_hash_value

ls_hash_value = Hash(ls_input, SHA256!)
MessageBox("SHA-256 哈希值", ls_hash_value)
3. 计算密码的哈希值并存储到数据库
假设用户输入的密码需要计算哈希值后存储到数据库中。


// 用户输入的密码
string ls_password = sle_password.Text

// 计算密码的 SHA-256 哈希值
string ls_password_hash
ls_password_hash = Hash(ls_password, SHA256!)

// 将哈希值存储到数据库
string ls_sql
ls_sql = "INSERT INTO users (username, password_hash) VALUES (?, ?)"

DECLARE cur_insert CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_sql;
OPEN cur_insert USING :sle_username.Text, :ls_password_hash;

IF SQLCA.SQLCode = 0 THEN
    MessageBox("成功", "用户注册成功!")
ELSE
    MessageBox("错误", "用户注册失败!")
END IF

CLOSE cur_insert;
注意事项
哈希算法的选择:

MD5 和 SHA-1 已经不再安全,建议使用 SHA-256 或更高版本的算法。

如果需要更高的安全性,可以使用 SHA-512。

哈希值的用途:

哈希值通常用于密码存储、数据校验等场景。

哈希值是不可逆的,无法从哈希值还原原始数据。

加盐(Salt):

为了增强安全性,建议在计算哈希值时加入“盐值”(一个随机字符串),防止彩虹表攻击。

示例:


string ls_salt = "random_salt_value"
string ls_password_with_salt = ls_password + ls_salt
string ls_password_hash = Hash(ls_password_with_salt, SHA256!)
哈希值的长度:

不同算法的哈希值长度不同,例如:

MD5:32 字符(16 字节)。

SHA-1:40 字符(20 字节)。

SHA-256:64 字符(32 字节)。

SHA-512:128 字符(64 字节)。

示例:加盐哈希
以下是一个完整的示例,演示如何使用加盐哈希存储用户密码。


// 用户输入的密码
string ls_password = sle_password.Text

// 生成随机盐值
string ls_salt = String(Rand(100000), "00000")// 5 位随机数作为盐值

// 计算加盐哈希值
string ls_password_with_salt = ls_password + ls_salt
string ls_password_hash = Hash(ls_password_with_salt, SHA256!)

// 将用户名、哈希值和盐值存储到数据库
string ls_sql
ls_sql = "INSERT INTO users (username, password_hash, salt) VALUES (?, ?, ?)"

DECLARE cur_insert CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_sql;
OPEN cur_insert USING :sle_username.Text, :ls_password_hash, :ls_salt;

IF SQLCA.SQLCode = 0 THEN
    MessageBox("成功", "用户注册成功!")
ELSE
    MessageBox("错误", "用户注册失败!")
END IF

CLOSE cur_insert;
总结
Hash() 函数是 PowerBuilder 中用于计算字符串哈希值的重要工具。

在实际应用中,建议使用安全的哈希算法(如 SHA-256)并结合加盐技术,以增强数据安全性。

通过哈希值,可以有效保护敏感信息(如用户密码)的安全。



这是DS给的回答,还是可以借鉴的。
页: [1]
查看完整版本: [【Deepseek】小试牛刀,一段PB代码

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com