用vb实现DES加解密算法(三)--解密[5]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 agamem 的 blog

        c_d(i) = c15(i)
        c_d(i + 28) = d15(i)
    next
   
    'pc_2转换,生成k15
    for i = 0 to 47
        k15(i) = c_d(pc_2(i))
    next
   
    '***************************************************k16
    '生成c16,d16
    for i = 0 to 26
        c16(i) = c15(i + lsi(16))
        d16(i) = d15(i + lsi(16))
    next
    c16(27) = c15(0)
    d16(27) = d15(0)
   
    '组合c16,d16成c_d
    for i = 0 to 27
        c_d(i) = c16(i)
        c_d(i + 28) = d16(i)
    next
   
    'pc_2转换,生成k16
    for i = 0 to 47
        k16(i) = c_d(pc_2(i))
    next
   
    '**************************************************************************************
   
    '加密过程
'将明文位数扩展为8的倍数
if (ubound(scode) + 1) mod 8 > 0 then redim preserve scode(((ubound(scode) + 1) \ 8 + 1) * 8 - 1)
'定义返回密文长度
redim breturn(ubound(scode))

for j = 0 to ubound(scode) step 8
    copymemory tempcode(0), scode(j), 8
    for i = 0 to 7
        bincode(i * 8 + 0) = (tempcode(i) and &h80) \ &h80
        bincode(i * 8 + 1) = (tempcode(i) and &h40) \ &h40
        bincode(i * 8 + 2) = (tempcode(i) and &h20) \ &h20
        bincode(i * 8 + 3) = (tempcode(i) and &h10) \ &h10
        bincode(i * 8 + 4) = (tempcode(i) and &h8) \ &h8
        bincode(i * 8 + 5) = (tempcode(i) and &h4) \ &h4
        bincode(i * 8 + 6) = (tempcode(i) and &h2) \ &h2
        bincode(i * 8 + 7) = (tempcode(i) and &h1) \ &h1
    next
   
    'ip置换
    for i = 0 to 63
        codeip(i) = bincode(ip(i))
    next
   
    '分段
    for i = 0 to 31
        r0(i) = codeip(i)
        l0(i) = codeip(i + 32)
    next
   
    '进行第一次迭代
    for i = 0 to 47
        codee(i) = r0(e(i))                 '经过e变换扩充,由32位变为48位
        codee(i) = codee(i) xor k16(i)        '与k16按位作不进位加法运算
    next
   
    '分8组
    for i = 0 to 5
        codes1(i) = codee(i)
        codes2(i) = codee(i + 6)
        codes3(i) = codee(i + 12)
        codes4(i) = codee(i + 18)
        codes5(i) = codee(i + 24)
        codes6(i) = codee(i + 30)
        codes7(i) = codee(i + 36)
        codes8(i) = codee(i + 42)
    next
   
    's盒运算,得到8个数
   
        s(0) = s1(codes1(5) + codes1(0) * 2, codes1(4) + codes1(3) * 2 + codes1(2) * 4 + codes1(1) * 8)
        s(1) = s2(codes2(5) + codes2(0) * 2, codes2(4) + codes2(3) * 2 + codes2(2) * 4 + codes2(1) * 8)
        s(2) = s3(codes3(5) + codes3(0) * 2, codes3(4) + codes3(3) * 2 + codes3(2) * 4 + codes3(1) * 8)
        s(3) = s4(codes4(5) + codes4(0) * 2, codes4(4) + codes4(3) * 2 + codes4(2) * 4 + codes4(1) * 8)
        s(4) = s5(codes5(5) + codes5(0) * 2, codes5(4) + codes5(3) * 2 + codes5(2) * 4 + codes5(1) * 8)

本文关键:DES
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top