一个利用随机数加密字串的算法

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

本文简介:选择自 rainstormmaster 的 blog

       首先这个算法没什么特殊之处,只是怕以后找不到,所以放到了这上面 

       每个字节加密后有6种结果(占两个字节,如果需要大于6种的话,就要多用1个字节,即占3 个字节),也就是说如果字串占n个字节的话,可能产生的结果为6的n次方个,这个算法破解的强度不大,大家可以完善一下:

'窗体上一个按钮,两个listbox
option explicit

private sub command1_click()
    dim i as long
    dim s as string
    for i = 1 to 100
        s = encode("这是一个测试 hello world")
        list1.additem s
        s = decode(s)
        list2.additem s
    next
end sub
private function encode(byval s as string) as string '加密
    if len(s) = 0 then exit function
    dim buff() as byte
    buff = strconv(s, vbfromunicode)
    dim i as long
    dim j as byte
    dim k as byte, m as byte
    dim mstr as string
    mstr = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz"
    dim outs as string
    i = ubound(buff) + 1
    outs = space(2 * i)
    dim temps as string
    for i = 0 to ubound(buff)
        randomize time
        j = cbyte(5 * (math.rnd()) + 0) '最大产生的随机数只能是5,不能再大了,再大的话,就要多用一个字节
        buff(i) = buff(i) xor j
        k = buff(i) mod len(mstr)
        m = buff(i) \ len(mstr)
        m = m * 2 ^ 3 + j
        temps = mid(mstr, k + 1, 1) + mid(mstr, m + 1, 1)
        mid(outs, 2 * i + 1, 2) = temps
     next
     encode = outs
end function

private function decode(byval s as string) as string '解密
    on error goto myerr
    dim i as long
    dim j as byte
    dim k as byte
    dim m as byte
    dim mstr as string
    mstr = "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz"
    dim t1 as string, t2 as string
    dim buff() as byte
    dim n as long
    n = 0
    for i = 1 to len(s) step 2
        t1 = mid(s, i, 1)
        t2 = mid(s, i + 1, 1)
        k = instr(1, mstr, t1) - 1
        m = instr(1, mstr, t2) - 1
        j = m \ 2 ^ 3
        m = m - j * 2 ^ 3
        redim preserve buff(n)
        buff(n) = j * len(mstr) + k
        buff(n) = buff(n) xor m
        n = n + 1
     next
     decode = strconv(buff, vbunicode)
     exit function
myerr:
     decode = ""
end function

本文关键:vb 随机数 加密
 

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

go top