Office中国论坛/Access中国论坛

标题: [转帖]一个利用随机数加密字串的算法 [打印本页]

作者: zhuyiwen    时间: 2004-12-26 01:19
标题: [转帖]一个利用随机数加密字串的算法
标题: 一个利用随机数加密字串的算法

选择自 rainstormmaster 的 Blog

关键字:  vb, 随机数, 加密



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

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

  2. Option Explicit

  3. Private Sub Command1_Click()

  4.     Dim i As Long

  5.     Dim s As String

  6.     For i = 1 To 100

  7.         s = encode("这是一个测试 hello world")

  8.         List1.AddItem s

  9.         s = decode(s)

  10.         List2.AddItem s

  11.     Next

  12. End Sub



  13. Private Function encode(ByVal s As String) As String '加密

  14.     If Len(s) = 0 Then Exit Function

  15.     Dim buff() As Byte

  16.     buff = StrConv(s, vbFromUnicode)

  17.     Dim i As Long

  18.     Dim j As Byte

  19.     Dim k As Byte, m As Byte

  20.     Dim mstr As String

  21.     mstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"

  22.     Dim outs As String

  23.     i = UBound(buff) + 1

  24.     outs = Space(2 * i)

  25.     Dim temps As String

  26.     For i = 0 To UBound(buff)

  27.         Randomize Time

  28.         j = CByte(5 * (Math.Rnd()) + 0) '最大产生的随机数只能是5,不能再大了,再大的话,就要多用一个字节

  29.         buff(i) = buff(i) Xor j

  30.         k = buff(i) Mod Len(mstr)

  31.         m = buff(i) \ Len(mstr)

  32.         m = m * 2 ^ 3 + j

  33.         temps = Mid(mstr, k + 1, 1) + Mid(mstr, m + 1, 1)

  34.         Mid(outs, 2 * i + 1, 2) = temps

  35.      Next

  36.      encode = outs

  37. End Function



  38. Private Function decode(ByVal s As String) As String '解密

  39.     On Error GoTo myERR

  40.     Dim i As Long

  41.     Dim j As Byte

  42.     Dim k As Byte

  43.     Dim m As Byte

  44.     Dim mstr As String

  45.     mstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"

  46.     Dim t1 As String, t2 As String

  47.     Dim buff() As Byte

  48.     Dim n As Long

  49.     n = 0

  50.     For i = 1 To Len(s) Step 2

  51.         t1 = Mid(s, i, 1)

  52.         t2 = Mid(s, i + 1, 1)

  53.         k = InStr(1, mstr, t1) - 1

  54.         m = InStr(1, mstr, t2) - 1

  55.         j = m \ 2 ^ 3

  56.         m = m - j * 2 ^ 3

  57.         ReDim Preserve buff(n)

  58.         buff(n) = j * Len(mstr) + k

  59.         buff(n) = buff(n) Xor m

  60.         n = n + 1

  61.      Next

  62.      decode = StrConv(buff, vbUnicode)

  63.      Exit Function

  64. myERR:

  65.      decode = ""

  66. End Function
复制代码
作者Blog:http://blog.csdn.netainstormmaster/
作者: 情比金坚    时间: 2004-12-26 02:31
收藏
作者: quanli    时间: 2004-12-26 18:12
收藏,一次我发现随机数字在一台机子上每次第一次运行都是相同的,不解。。。。。
作者: sxm1967    时间: 2006-7-23 21:05
首先要感谢,我去试试
作者: zxzx2733    时间: 2006-7-23 21:50
din




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3