回 帖 发 新 帖 刷新版面

主题:读加密函数

小弟在网上抄了一段字符串加密代码如下:
Public Function EnDeCode(ByVal strSource As String, ByVal MA As Integer) As String
        On Error GoTo ErrEnDeCode   '设置错误捕捉陷井

        Dim CharNum As Long, RandomInteger As Integer
        Dim SingleCHAR As Char
        Dim strTmp As String
        Dim i As Integer
        Dim X As Single

        If MA < 0 Then
            MA = MA * (-1)
        End If
        X = Rnd(-MA)
        For i = 1 To Len(strSource) Step 1
            SingleCHAR = Mid(strSource, i, 1)
            CharNum = Asc(SingleCHAR)
            Do
                RandomInteger = Int(127 * Rnd())
            Loop While RandomInteger > 30 And RandomInteger < 100
            CharNum = CharNum Xor RandomInteger    
            strTmp = strTmp & Chr(CharNum)
        Next i
        EnDeCode = strTmp
        Exit Function
ErrEnDeCode:
        EnDeCode = ""
        MsgBox(Err.Number & Chr(13) & Err.Description)
    End Function

小弟不懂的是:
1.在取随机数时,首先用X=RND(-MA)取过一次后是不是就能保证下次RND取值相同?
2.为什么随机数取值不能是30至100的数?如果是因为怕不能显示与保存,那是什么原理呢?100至127ASC码值的数都可以保存与显示呀?
请各位大虾支招,感激不尽!

回复列表 (共4个回复)

沙发

高手们都去了哪里呀?快来教教我呀!

板凳

VB的帮助说得很清楚:
Rnd 函数返回一个包含随机数值的 Single。
语法:Rnd[(number)]
可选的 number 参数是 Single 或任何有效的数值表达式。
返回值:如果 number 的值是小于 0,每次都使用 number 作为随机数种子得到的相同结果。 
随机数取值>30是因为ascii码<31的是控制字符,不适宜做密码,至于<100,我认为只是作者的限制罢了,你也可以设置为<127
不过,我看不出 x 在这段代码中的作用

3 楼

呵呵,是不是恺撒加密法啊?现在想看点密码学方面的书,无奈里面要求的数学知识太高深,有难度哇

4 楼

2楼的你看清楚呀,这段程序的取值是当>30且<100时重新生成随机数,也就是不取>30且<100的值!

我来回复

您尚未登录,请登录后再回复。点此登录或注册