ehxz 发表于 2006-7-25 14:58:55

[转帖]PB数据库连接描述文件的密码加密和解密原理

<div class="con_sample"><p>阐述PB开发环境下数据库连接描述文件的密码加密和解密原理。加密原理:首先将原字符串反转(reverse),逐个字符取ASCII并由10进制转为16进制值,然后转为小写,最后末尾加'00'作为结束符。解密原理:去掉末尾'00',将原字符串反转(reverse),每2个字符由16进制转为10进制值,即ASCII值,根据ASCII取字符,累积到一个字符串,这就是真正的登录密码。</p></div><div class="con_all"><p></p><div align="left">&nbsp;&nbsp;&nbsp; 在PB开发环境下要连接数据库必须预先创建一个描述文件,该描述文件的条目写在注册表HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\9.0\DatabaseProfiles\PowerBuilder下(不同的PB版本不同的键路径),每个描述文件对应一个注册表项目,描述文件的内容如用户名称和密码作为注册键存储在对应注册表项目下。除了数据库密码和登录密码外,数据未加密。经过简单的摸索,发现PB在对登录密码的加密、解密方面其实很简单。</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>其加密原理可以这样描述。首先将原字符串反转(reverse),逐个字符取ASCII并由10进制转为16进制值,然后转为小写,最后末尾加'00'作为结束符。</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>了解了其加密原理后,就很容易推断其解密原理,其解密原理可以这样描述。去掉末尾'00',将原字符串反转(reverse),每2个字符由16进制转为10进制值,即ASCII值,根据ASCII取字符,累积到一个字符串,这就是真正的登录密码。</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>附后的函数可以作为解密的参考代码(开发环境:PB9)。你可以调用该函数在PB开发环境下不输入用户名称或(和)密码直接进入系统,避免复杂的密码记忆,方便开发人员运行、测试系统。</div><div>&nbsp;&nbsp;&nbsp; 另外,jaguar服务器描述文件的密码也采用相同的加密和解密机制,只是存放的注册表路径不一样而已。</div><div>&nbsp;&nbsp;&nbsp; 最后提醒读者,不要将代码用于非法用途,由此带来的后果或法律纠纷本人概不负责。</div><div>&nbsp;&nbsp;&nbsp; 附:解密源代码</div><div>/*******************************************************************</div><div>函数名称:f_decryptpbpassword()</div><div>参数:<span>&nbsp;&nbsp;&nbsp;&nbsp; as_orginalpassword string </span>原始密码</div><div>返回值:&nbsp;string 解密后文本</div><div>功能描述:解密PB数据库连接描述密码</div><div>创建人:<span>&nbsp; </span>康剑民</div><div>创建日期:2006-04-27</div><div>版本号: V1.0</div><div>*******************************************************************/</div><div>string ls_temp,ls_return=''</div><div>integer i,li_count,li_ascii</div><div>nvo_numerical lnv_numerical</div><div>&nbsp;</div><div>if len(as_orginalpassword) &lt; 2 or as_orginalpassword = '00' then return ''</div><div>&nbsp;</div><div>as_orginalpassword = left(reverse(as_orginalpassword),len(as_orginalpassword) - 2)</div><div>li_count = ceiling(len(as_orginalpassword) / 2)</div><div>for i = 1 to li_count</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ls_temp = mid(as_orginalpassword,(i - 1) * 2 + 1,2)</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; li_ascii = lnv_numerical.of_hextodecimal(ls_temp)</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ls_temp = char(li_ascii)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ls_return = ls_return + ls_temp</span></div><div>next</div><div>&nbsp;</div><div>return ls_return</div><div>&nbsp;</div><div>/*******************************************************************</div><div>函数名称:of_hextodecimal()</div><div>参数:<span>&nbsp;&nbsp;&nbsp;&nbsp; as_hexdata string 16</span>进制数据</div><div>返回值:&nbsp;unsignedlong 10进制数据</div><div>功能描述:16进制数据转为10进制数据</div><div>创建人:<span>&nbsp; </span>康剑民</div><div>创建日期:2006-04-27</div><div>版本号:V1.0</div><div>*******************************************************************/</div><div>char<span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lch_char[]</span></div><div>unsignedlong<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lul_decimal=0</span></div><div>integer li_dec, i, li_len</div><div>&nbsp;</div><div>for i = 48 To 57</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; li_dec = i - 48</span></div><div>next</div><div>&nbsp;</div><div>for i = 65 To 70</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; li_dec = i - 55</span></div><div>next </div><div>&nbsp;</div><div>as_hexdata = lower(as_hexdata)</div><div>lch_char = as_hexdata</div><div>li_len = len (as_hexdata)</div><div>&nbsp;</div><div>for i = 1 to li_len</div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; choose case lch_char</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '0' to '9', 'a' to 'f'</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lul_decimal = lul_decimal * 16 + li_dec)]</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case else</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return lul_decimal</span></div><div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end choose&nbsp;&nbsp;&nbsp; </span></div><div>next</div><div></div><div>return lul_decimal</div><div></div><div>写作日期:2006-05-15</div><div><a href="http://dev.csdn.net/author/pbdesigner/cb9ed886a13d44289c4467e4272f5a96.html">http://dev.csdn.net/author/pbdesigner/cb9ed886a13d44289c4467e4272f5a96.html</a></div></div>
页: [1]
查看完整版本: [转帖]PB数据库连接描述文件的密码加密和解密原理

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

Mail To:Admin@SybaseBbs.com