祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 141|回复: 5

[学习笔记] [【Deepseek】小试牛刀,一段PB代码

[复制链接]

[学习笔记] [【Deepseek】小试牛刀,一段PB代码

[复制链接]
飞火流星2009

主题

0

回帖

464

积分

中级会员

积分
464
贡献
在线时间
小时
2025-2-11 09:51:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
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注入攻击。
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
aftabalam08

主题

0

回帖

976

积分

高级会员

积分
976
贡献
在线时间
小时
2025-2-11 13:29:25 | 显示全部楼层
Good
共享共进共赢Sharing And Win-win Results
smallanntse

主题

0

回帖

3725

积分

论坛元老

积分
3725
贡献
在线时间
小时
2025-2-12 14:02:00 | 显示全部楼层
使用参数化查询防止SQL注入攻击。非常好,
deepseek比百毒的ai好啊
共享共进共赢Sharing And Win-win Results
woyaodwn

主题

0

回帖

4万

积分

论坛元老

积分
42709
贡献
在线时间
小时
2025-2-13 10:11:34 | 显示全部楼层
可以的
共享共进共赢Sharing And Win-win Results
swimchen

主题

0

回帖

6607

积分

论坛元老

积分
6607
贡献
在线时间
小时
7 天前 | 显示全部楼层
deepseek可以给出hash()函数的代码吗?

点评

在 PowerBuilder 中,Hash() 函数用于计算字符串的哈希值。哈希值是一个固定长度的字符串,通常用于数据校验、密码存储等场景。PowerBuilder 的 Hash() 函数支持多种哈希算法,例如 MD5、SHA-1、SHA-256 等。 以下  详情 回复 发表于 5 天前
共享共进共赢Sharing And Win-win Results
飞火流星2009 楼主

主题

0

回帖

464

积分

中级会员

积分
464
贡献
在线时间
小时
5 天前 | 显示全部楼层
本帖最后由 飞火流星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给的回答,还是可以借鉴的。
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

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

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2025-2-22 02:15 , Processed in 0.035944 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表