⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nvo_md5.sru

📁 在powerbuilder 7.0中实现md5的算法
💻 SRU
📖 第 1 页 / 共 3 页
字号:
return ll_return
end function

private function long of_i (readonly long al_x, readonly long al_y, readonly long al_z);
/*******************************************************************
函数名称:of_i()
参数:     al_x long 值1
                      al_y long 值2
                      al_z long 值3
返回值: long 位运算结果
功能描述:md5加密时的位运算之一
*******************************************************************/
return inv_numerical.of_bitwisexor(al_y,inv_numerical.of_bitwiseor(al_x,(al_z + 1) * (-1)))
end function

private function long of_ii (readonly long al_a, readonly long al_b, readonly long al_c, readonly long al_d, readonly long al_x, readonly long al_s, readonly long al_ac);
/*******************************************************************
函数名称:of_ii()
参数:     al_a long 值1
                      al_b long 值2
                      al_c long 值3
                      al_d long 值4
                      al_x long 值5
                      al_s long 值6
                      al_ac long 值7
返回值: long 运算结果
功能描述:md5加密时的运算之一
*******************************************************************/
long ll_return
 
ll_return = this.of_i(al_b,al_c,al_d)
ll_return = this.of_addunsigned(ll_return,al_x)
ll_return = this.of_addunsigned(ll_return,al_ac)
ll_return = this.of_addunsigned(al_a,ll_return)
ll_return = this.of_rotateleft(ll_return,al_s)
ll_return = this.of_addunsigned(ll_return,al_b)
 
return ll_return
end function

private function long of_lshift (readonly long al_oldvalue, readonly long al_shiftbits);
/*******************************************************************
函数名称:of_lshift()
参数:     al_oldvalue long 原值
                      al_shiftbits long 左移位数
返回值: long 左移指定位数后的值
功能描述:数值按位左移
*******************************************************************/
ulong ll_return,ll_pos
string ls_value
 
//转成二进制
ls_value = inv_numerical.of_binary(al_oldvalue)
if al_oldvalue < 0 then    
       ls_value = midw(ls_value,2,lenw(ls_value))
       ls_value = inv_numerical.of_bitwisenot(ls_value) 
       //低位加1
       //ll_pos = lastpos(ls_value,'0')
       if ll_pos = 0 then
              ls_value = fill('0',lenw(ls_value))
       else
              ls_value = leftw(ls_value,ll_pos - 1) + '1' + fill('0',lenw(ls_value) - ll_pos)
       end if
       ls_value = fill('1',32 - lenw(ls_value)) + ls_value
       ll_return = inv_numerical.of_decimal(ls_value)
else
       ll_return = al_oldvalue
end if
 
ll_return = ll_return * this.of_m2power(al_shiftbits)
ll_return = inv_numerical.of_bitwiseand(ll_return,-1)
 
return ll_return
end function

private function long of_m2power (readonly long al_oldvalue);
/*******************************************************************
函数名称:of_m2power()
参数:     al_oldvalue long 原值
返回值: long 新值
功能描述:md5加密时的运算之一
*******************************************************************/
if al_oldvalue >= 0 and al_oldvalue <= 30 then
       return 2^al_oldvalue
else
       return 0
end if
end function

private function long of_monbits (readonly long al_oldvalue);
/*******************************************************************
函数名称:of_monbits()
参数:     al_oldvalue long 原值
返回值: long 新值
功能描述:md5加密时的运算之一
*******************************************************************/
if al_oldvalue >= 0 and al_oldvalue <= 30 then
       return 2^(al_oldvalue + 1) - 1
else
       return 0
end if
end function

private function long of_rotateleft (readonly long al_oldvalue, readonly long al_shiftbits);
/*******************************************************************
函数名称:of_rotateleft()
参数:     al_oldvalue long 原值
                      al_shiftbits long 左移位数
返回值: long 数据左移指定位数后的值
功能描述:数据左移指定位数
*******************************************************************/
return inv_numerical.of_bitwiseor(this.of_lshift(al_oldvalue,al_shiftbits),this.of_rshift(al_oldvalue,32 - al_shiftbits))
end function

private function long of_rshift (readonly long al_oldvalue, readonly long al_shiftbits);
/*******************************************************************
函数名称:of_rshift()
参数:     al_oldvalue long 原值
                      al_shiftbits long 右移位数
返回值: long 右移指定位数后的值
功能描述:数值按位右移
*******************************************************************/
ulong ll_return,ll_pos
string ls_value
 
//转成二进制
ls_value = inv_numerical.of_binary(al_oldvalue)
 
if al_oldvalue < 0 then    
       ls_value = midw(ls_value,2,lenw(ls_value))
       ls_value = inv_numerical.of_bitwisenot(ls_value) 
       //低位加1
       //ll_pos = lastpos(ls_value,'0')
       if ll_pos = 0 then
              ls_value = fill('0',lenw(ls_value))
       else
              ls_value = leftw(ls_value,ll_pos - 1) + '1' + fill('0',lenw(ls_value) - ll_pos)
       end if
       ls_value = fill('1',32 - lenw(ls_value)) + ls_value
       ll_return = inv_numerical.of_decimal(ls_value)
else
       ll_return = al_oldvalue
end if
 
ll_return = long(ll_return / this.of_m2power(al_shiftbits))
//转成二进制
ls_value = inv_numerical.of_binary(ll_return)
if ll_return < 0 then
       ls_value = midw(ls_value,2,lenw(ls_value))
       ls_value = inv_numerical.of_bitwisenot(ls_value) 
       //低位加1
       //ll_pos = lastpos(ls_value,'0')
       if ll_pos = 0 then
              ls_value = fill('0',lenw(ls_value))
       else
              ls_value = leftw(ls_value,ll_pos - 1) + '1' + fill('0',lenw(ls_value) - ll_pos)
       end if
       ls_value = fill('1',32 - lenw(ls_value)) + ls_value
       ll_return = inv_numerical.of_decimal(ls_value)
end if
ll_return = inv_numerical.of_bitwiseand(ll_return,-1)
 
return ll_return
end function

private function string of_wordtohex (readonly long al_value);
/*******************************************************************
函数名称:of_wordtohex()
参数:     al_value long 原值
返回值: string 转化为十六进制后的值
功能描述:将数字转为十六进制值
*******************************************************************/
string ls_return,ls_temp
long ll_temp,ll_count
 
ls_return = ''
ll_count = 0
do while ll_count < 4
       ll_temp = inv_numerical.of_bitwiseand(this.of_rshift(al_value,ll_count * 8),255)
       choose case integer(ll_temp / 16)
       case 0 to 9
              ls_temp = string(integer(ll_temp / 16))
       case 10
              ls_temp = 'a'
       case 11
              ls_temp = 'b'
       case 12
              ls_temp = 'c'
       case 13
              ls_temp = 'd'
       case 14
              ls_temp = 'e'
       case 15
              ls_temp = 'f'
       case else
              ls_temp = ''
       end choose
       ls_return = ls_return + ls_temp
       choose case mod(ll_temp,16)
       case 0 to 9
              ls_temp = string(mod(ll_temp,16))
       case 10
              ls_temp = 'a'
       case 11
              ls_temp = 'b'
       case 12
              ls_temp = 'c'
       case 13
              ls_temp = 'd'
       case 14
              ls_temp = 'e'
       case 15
              ls_temp = 'f'
       case else
              ls_temp = ''
       end choose
       ls_return = ls_return + ls_temp
       ll_count = ll_count + 1
loop
 
return ls_return
end function

on nvo_md5.create
call super::create
TriggerEvent( this, "constructor" )
end on

on nvo_md5.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -