请问MD5加密用PB怎么实现?在线等!

westlife_911 2005-08-25 09:06:48
请问MD5加密用PB怎么实现?在线等!
...全文
498 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
moneyfirst 2005-09-15
  • 打赏
  • 举报
回复
能给我发一个嘛? avirex@21cn.com 谢谢
zifenglingx 2005-09-13
  • 打赏
  • 举报
回复
楼上这段代码不太看得懂啊,可不可以注释一下啊
chinalht 2005-09-05
  • 打赏
  • 举报
回复
public function string of_compute (string as_password);ulong m[], lv
long ll_len, ll_full
long i, j, k
/*首先需要对信息进行填充,使其字节长度对512求余的结果等于448。
因此,信息的字节长度(bits length)将被扩展至n*512+448,即n*64+56个字节(bytes),
n为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,
直到满足上面的条件时才停止用0对信息的填充。
然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。
经过这两步的处理,现在的信息字节长度=n*512+448+64=(n+1)*512,即长度恰好是512的整数倍。
*/
ll_len = len(as_password)
ll_full = long(ll_len / MD5_BYTESIZE) * MD5_BYTESIZE + MD5_BYTESIZE
k = mod(ll_len,MD5_BYTESIZE)
if k > 56 then ll_full += MD5_BYTESIZE
if k <> 56 then as_password = as_password + char(128)
m[ll_full / 4 - 1] = BitShl( ll_len, 3)
m[ll_full / 4] = BitShr( ll_len, 29)
//
k = 1
ll_len = len(as_password)
for i = 1 to ll_len
m[k] = BitShl(asc(mid(as_password,i,1)),j) + m[k]
j += 8
if j = 32 then
k ++
j = 0
end if
next
//
ulong a, b, c, d, aa, bb, cc, dd

k = 1
a = CAA; b = CBB; c = CCC; d = CDD
for i = 1 to ll_full / MD5_BYTESIZE
aa = a; bb = b; cc = c; dd = d;
ff(a,b,c,d,m[k + 0], 7,CF0);
ff(d,a,b,c,m[k + 1], 12,CF1);
ff(c,d,a,b,m[k + 2], 17,CF2);
ff(b,c,d,a,m[k + 3], 22,CF3);
ff(a,b,c,d,m[k + 4], 7,CF4);
ff(d,a,b,c,m[k + 5], 12,CF5);
ff(c,d,a,b,m[k + 6], 17,CF6);
ff(b,c,d,a,m[k + 7], 22,CF7);
ff(a,b,c,d,m[k + 8], 7,CF8);
ff(d,a,b,c,m[k + 9], 12,CF9);
ff(c,d,a,b,m[k + 10],17,CF10);
ff(b,c,d,a,m[k + 11],22,CF11);
ff(a,b,c,d,m[k + 12], 7,CF12);
ff(d,a,b,c,m[k + 13],12,CF13);
ff(c,d,a,b,m[k + 14],17,CF14);
ff(b,c,d,a,m[k + 15],22,CF15);
//second round
gg(a,b,c,d,m[k + 1], 5,CG0);
gg(d,a,b,c,m[k + 6], 9,CG1);
gg(c,d,a,b,m[k + 11],14,CG2);
gg(b,c,d,a,m[k + 0], 20,CG3);
gg(a,b,c,d,m[k + 5], 5,CG4);
gg(d,a,b,c,m[k + 10], 9,CG5);
gg(c,d,a,b,m[k + 15],14,CG6);
gg(b,c,d,a,m[k + 4], 20,CG7);
gg(a,b,c,d,m[k + 9], 5,CG8);
gg(d,a,b,c,m[k + 14], 9,CG9);
gg(c,d,a,b,m[k + 3], 14,CG10);
gg(b,c,d,a,m[k + 8], 20,CG11);
gg(a,b,c,d,m[k + 13], 5,CG12);
gg(d,a,b,c,m[k + 2], 9,CG13);
gg(c,d,a,b,m[k + 7], 14,CG14);
gg(b,c,d,a,m[k + 12],20,CG15);
// 第三轮
hh(a,b,c,d,m[k + 5], 4,CH0);
hh(d,a,b,c,m[k + 8], 11,CH1);
hh(c,d,a,b,m[k + 11],16,CH2);
hh(b,c,d,a,m[k + 14],23,CH3);
hh(a,b,c,d,m[k + 1], 4,CH4);
hh(d,a,b,c,m[k + 4], 11,CH5);
hh(c,d,a,b,m[k + 7], 16,CH6);
hh(b,c,d,a,m[k + 10],23,CH7);
hh(a,b,c,d,m[k + 13], 4,CH8);
hh(d,a,b,c,m[k + 0], 11,CH9);
hh(c,d,a,b,m[k + 3], 16,CH10);
hh(b,c,d,a,m[k + 6], 23,CH11);
hh(a,b,c,d,m[k + 9], 4,CH12);
hh(d,a,b,c,m[k + 12],11,CH13);
hh(c,d,a,b,m[k + 15],16,CH14);
hh(b,c,d,a,m[k + 2], 23,CH15);
// 第四轮
ii(a,b,c,d,m[k + 0], 6,CI0);
ii(d,a,b,c,m[k + 7], 10,CI1);
ii(c,d,a,b,m[k + 14],15,CI2);
ii(b,c,d,a,m[k + 5], 21,CI3);
ii(a,b,c,d,m[k + 12], 6,CI4);
ii(d,a,b,c,m[k + 3], 10,CI5);
ii(c,d,a,b,m[k + 10],15,CI6);
ii(b,c,d,a,m[k + 1], 21,CI7);
ii(a,b,c,d,m[k + 8], 6,CI8);
ii(d,a,b,c,m[k + 15],10,CI9);
ii(c,d,a,b,m[k + 6], 15,CI10);
ii(b,c,d,a,m[k + 13],21,CI11);
ii(a,b,c,d,m[k + 4], 6,CI12);
ii(d,a,b,c,m[k + 11],10,CI13);
ii(c,d,a,b,m[k + 2], 15,CI14);
ii(b,c,d,a,m[k + 9], 21,CI15);

a += aa; b += bb; c += cc; d += dd
k += 16
next
return lower(pof_hex(a) + pof_hex(b) + pof_hex(c) + pof_hex(d))
end function

public subroutine ii (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti);//ly xor ( lx or (not lz));
la += BitXor( lc, BitOr( lb, BitNot(ld) ) ) + mj + ti
la = lb + BitRol(la,s)
end subroutine
public subroutine gg (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti);//(lb and ld) or (lc and(not ld));
la += BitOr( BitAnd(lb, ld), BitAnd(lc,BitNot(ld)) ) + mj + ti
la = lb + BitRol(la,s)

end subroutine
public subroutine ff (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti);la += BitOr( BitAnd(lb,lc), BitAnd( BitNot(lb), ld) ) + mj + ti
la = lb + BitRol(la,s)

end subroutine

public subroutine hh (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti);//lx xor ly xor lz;
la += BitXor( BitXor( lb, lc ), ld ) + mj + ti
la = lb + BitRol(la,s)

end subroutine
protected function string pof_hex (unsignedlong k);string lr
//交换位置
lr = of_dec2hex(k)
lr = mid(lr,7,2) + mid(lr,5,2) + mid(lr,3,2) + mid(lr,1,2)
return lr
end function

on nvo_ez_md5.create
TriggerEvent( this, "constructor" )
end on

on nvo_ez_md5.destroy
TriggerEvent( this, "destructor" )
end on

chinalht 2005-09-05
  • 打赏
  • 举报
回复
$PBExportHeader$nvo_ez_md5.sru
$PBExportComments$MD5加密算法
forward
global type nvo_ez_md5 from nvo_ez_bitwise
end type
end forward

global type nvo_ez_md5 from nvo_ez_bitwise
end type

type variables
constant long MD5_BYTESIZE = 64
constant long MD5_WORDSIZE = 16

constant ulong cAA = 1732584193
constant ulong cBB = 4023233417
constant ulong cCC = 2562383102
constant ulong cDD = 271733878

constant ulong CF0 = 3614090360;
constant ulong CF1 = 3905402710;
constant ulong CF2 = 606105819;
constant ulong CF3 = 3250441966;
constant ulong CF4 = 4118548399;
constant ulong CF5 = 1200080426;
constant ulong CF6 = 2821735955;
constant ulong CF7 = 4249261313;
constant ulong CF8 = 1770035416;
constant ulong CF9 = 2336552879;
constant ulong CF10 = 4294925233;
constant ulong CF11 = 2304563134;
constant ulong CF12 = 1804603682;
constant ulong CF13 = 4254626195;
constant ulong CF14 = 2792965006;
constant ulong CF15 = 1236535329;
constant ulong CG0 = 4129170786;
constant ulong CG1 = 3225465664;
constant ulong CG2 = 643717713;
constant ulong CG3 = 3921069994;
constant ulong CG4 = 3593408605;
constant ulong CG5 = 38016083;
constant ulong CG6 = 3634488961;
constant ulong CG7 = 3889429448;
constant ulong CG8 = 568446438;
constant ulong CG9 = 3275163606;
constant ulong CG10 = 4107603335;
constant ulong CG11 = 1163531501;
constant ulong CG12 = 2850285829;
constant ulong CG13 = 4243563512;
constant ulong CG14 = 1735328473;
constant ulong CG15 = 2368359562;
constant ulong CH0 = 4294588738;
constant ulong CH1 = 2272392833;
constant ulong CH2 = 1839030562;
constant ulong CH3 = 4259657740;
constant ulong CH4 = 2763975236;
constant ulong CH5 = 1272893353;
constant ulong CH6 = 4139469664;
constant ulong CH7 = 3200236656;
constant ulong CH8 = 681279174;
constant ulong CH9 = 3936430074;
constant ulong CH10 = 3572445317;
constant ulong CH11 = 76029189;
constant ulong CH12 = 3654602809;
constant ulong CH13 = 3873151461;
constant ulong CH14 = 530742520;
constant ulong CH15 = 3299628645;
constant ulong CI0 = 4096336452;
constant ulong CI1 = 1126891415;
constant ulong CI2 = 2878612391;
constant ulong CI3 = 4237533241;
constant ulong CI4 = 1700485571;
constant ulong CI5 = 2399980690;
constant ulong CI6 = 4293915773;
constant ulong CI7 = 2240044497;
constant ulong CI8 = 1873313359;
constant ulong CI9 = 4264355552;
constant ulong CI10 = 2734768916;
constant ulong CI11 = 1309151649;
constant ulong CI12 = 4149444226;
constant ulong CI13 = 3174756917;
constant ulong CI14 = 718787259;
constant ulong CI15 = 3951481745;
end variables

forward prototypes
public function string of_compute (string as_password)
public subroutine ii (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti)
public subroutine gg (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti)
public subroutine ff (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti)
public subroutine hh (ref unsignedlong la, unsignedlong lb, unsignedlong lc, unsignedlong ld, unsignedlong mj, unsignedlong s, unsignedlong ti)
protected function string pof_hex (unsignedlong k)
end prototypes

chinalht 2005-09-05
  • 打赏
  • 举报
回复
将下面2个对象依次导入程序,然后声明
nvo_ez_md5 lnv
ls_result = lnv.of_compute('abc')
-----------------------------------------------------------------

$PBExportHeader$nvo_ez_bitwise.sru
$PBExportComments$二进制位操作
forward
global type nvo_ez_bitwise from nonvisualobject
end type
end forward

global type nvo_ez_bitwise from nonvisualobject autoinstantiate
end type

type prototypes

end prototypes

type variables

end variables

forward prototypes
public function string of_dec2bin (unsignedlong k)
public function ulong of_bin2dec (readonly string as_bin)
public subroutine of_dec2bin (ulong k, ref ulong r[32])
public function string of_dec2hex (unsignedlong k)
public function ulong of_hex2dec (readonly string as_hex)
public function unsignedlong bitshr (unsignedlong k, integer bit)
public function unsignedlong bitshl (unsignedlong k, integer bit)
public function unsignedlong bitnot (unsignedlong k)
public function unsignedlong bitrol (unsignedlong k, unsignedlong bit)
public function ulong bitand (ulong k1, ulong k2)
public function ulong bitor (ulong k1, ulong k2)
public function ulong bitxor (ulong k1, ulong k2)
end prototypes

public function string of_dec2bin (unsignedlong k);string ls
long i, ld

ld = 1
for i = 1 to 31
if mod(k,ld + ld) >= ld then
ls = '1' + ls
else
ls = '0' + ls
end if
ld += ld
next
if k >= ld then return '1' + ls
return '0' + ls
end function

public function ulong of_bin2dec (readonly string as_bin);ulong lr, ld = 1
long i

for i = 32 to 1 step -1
if mid( as_bin, i, 1) = '1' then
lr += ld
end if
ld += ld
next
return lr
end function

public subroutine of_dec2bin (ulong k, ref ulong r[32]);long i
ulong ll

ll = 1
for i = 1 to 31
if mod(k,ll + ll) >= ll then r[i] = ll
ll += ll
next
if k >= ll then r[i] = ll

end subroutine

public function string of_dec2hex (unsignedlong k);char Hex[0 to 15] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}
string ls

do while k > 0
ls = Hex[mod(k, 16)] + ls
k /= 16
loop
return ls
end function

public function ulong of_hex2dec (readonly string as_hex);constant int C0 = asc('0')
constant int CA = asc('A')
constant int CAs = asc('a')
ulong k, ld = 1
int lc, i

for i = len(as_hex) to 1 step -1
lc = asc(mid(as_hex,i,1))
if lc > CA then
k += ld * (lc - CA + 10)
elseif lc > CAs then
k += ld * (lc - CAs + 10)
else
k += ld * (lc - C0)
end if
ld *= 16
next
return k
end function

public function unsignedlong bitshr (unsignedlong k, integer bit);return k / (2^bit)
end function

public function unsignedlong bitshl (unsignedlong k, integer bit);return k * 2^bit
end function

public function unsignedlong bitnot (unsignedlong k);return 4294967295 - k
end function

public function unsignedlong bitrol (unsignedlong k, unsignedlong bit);return BitShl(k,bit) + BitShr(k,32 - bit)
end function

public function ulong bitand (ulong k1, ulong k2);ulong lm = 1, lr

do
if mod(k1,lm + lm) >= lm then
if mod(k2,lm + lm) >= lm then lr += lm
end if
lm += lm
if k1 < lm then return lr
if k2 < lm then return lr
if lm = 2147483648 then return lr + lm
loop while true
end function

public function ulong bitor (ulong k1, ulong k2);ulong lm = 1, lr

do
if mod(k1,lm + lm) >= lm then
lr += lm
elseif mod(k2,lm + lm) >= lm then
lr += lm
end if
lm += lm
if k1 < lm then
if k2 < lm then return lr
end if
if lm = 2147483648 then return lr + lm
loop while true
end function

public function ulong bitxor (ulong k1, ulong k2);ulong lm = 1, lr

do
if (mod(k1,lm + lm) >= lm) <> (mod(k2,lm + lm) >= lm) then lr += lm
lm += lm
if k1 < lm then
if k2 < lm then return lr
end if
if lm = 2147483648 then
if (k1 < lm) <> (k2 < lm) then return lr + lm
return lr
end if
loop while true

end function

on nvo_ez_bitwise.create
TriggerEvent( this, "constructor" )
end on

on nvo_ez_bitwise.destroy
TriggerEvent( this, "destructor" )
end on

perneer 2005-08-29
  • 打赏
  • 举报
回复
我也来个irest@163.com
westlife_911 2005-08-25
  • 打赏
  • 举报
回复
给你分了是不是
怎么我这里显示没给分呀
saiche05 2005-08-25
  • 打赏
  • 举报
回复
给我发一个
saiche05@163.com
谢谢
westlife_911 2005-08-25
  • 打赏
  • 举报
回复
我试试一会给分
谢了
li_d_s 2005-08-25
  • 打赏
  • 举报
回复
已发
westlife_911 2005-08-25
  • 打赏
  • 举报
回复
huangsheng_911@126.com
谢谢
li_d_s 2005-08-25
  • 打赏
  • 举报
回复
我有个调dll实现的,要就留下mail
lishijin 2005-08-25
  • 打赏
  • 举报
回复
lishijin@yzvod.com
谢谢

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧