求各位大佬帮忙分析下我写的一个加密的函数(有注释|别的帖里)
vb吧
全部回复
仅看楼主
level 9
YmclVisprect 楼主
如题- 帖子链接(把平行(∥)符号去掉就行了)
http∥s:∥//tieba∥.baidu∥.com∥/p/∥6786602194
2020年07月02日 16点07分 1
level 11
你比题目中要求的多写了一个位置偏移的部分,这部分我没多看。
但就数字和字母加密那部分而言,稍显复杂,不必使用数组,建议直接操作ASCII值,本楼代码图仅供参考(无注释)
2020年07月03日 00点07分 2
level 13
建议加密用二进制读取,Xor加密之类的,直接按字节操作,加密后直接写入文件,速度快又加密性好(Xor加密太过简单,可以参考网上的资料)。直接操作字节不必调用Left、Mid、Asc这些函数加密速度是相当快的,加密大量数据也是可以的
2020年07月03日 00点07分 3
按字节加密的密文一般都包含特殊字符,文本框之类的都是无法显示的,只有你知道加密方式
2020年07月03日 00点07分
@隨風🍁缒夢 他那个是回复别人的题写的😂,一般文件加密不会操作字符串
2020年07月03日 01点07分
2020年07月03日 05点07分
吧务
level 13
一个加密程序,产生多种加密密文;而解密程序只有一个。
2020年07月03日 02点07分 4
吧务
level 13
Option Explicit
Dim mPath As String
' cWJ1 明文文件;cWJ2 密文文件
' 加密二进制文件:JiaMi_XOR(cWJ1,cWJ2)
' 加密成功返回【True】;否则返回【False】。
Private Function JiaMi_XOR( _
ByVal cWJ1 As String, _
ByVal cWJ2 As String) As Boolean
Dim n1 As Integer, n2 As Integer
Dim m As Integer, cc As String
Dim i As Long, nCD As Long
Dim nWJ1 As Integer, nWJ2 As Integer
Dim bWJ() As Byte
On Error GoTo CW000
' 找出 cWJ2 右边第一个反斜杠的位置:n1
n2 = Len(cWJ2)
For i = n2 To 1 Step -1
cc = Mid(cWJ2, i, 1)
If cc = Chr(92) Then
n1 = i + 1
Exit For
End If
Next
' 由 cWJ2 生成密码(m)
n2 = Len(cWJ2): cc = ""
For i = n1 To n2
cc = cc & CStr(Abs(Asc(Mid(cWJ2, i, 1))))
Next
n2 = Len(cc): m = 0
For i = 1 To n2
m = m + Val(Mid(cc, i, 1))
Next
Do While m > 127: m = m - 127: Loop
' 开始加密操作
JiaMi_XOR = False
nWJ1 = FreeFile
Open cWJ1 For Binary As #nWJ1
nCD = LOF(nWJ1)
cc = CStr(nCD) & "&" & CStr(m)
' MsgBox cc, 0 + 64, "文件长度"
If nCD = 0 Then
cc = cWJ1 & vbCrLf & vbCrLf
cc = cc & "文件内容为空,退出加密!"
MsgBox cc, 0 + 64, "系统提示"
Else
'  将 cWJ1 导入二进制数组
ReDim bWJ(nCD - 1) As Byte
Get nWJ1, , bWJ()
Close #nWJ1
'  将二进制数组进行异或运算
For i = LBound(bWJ) To UBound(bWJ)
bWJ(i) = bWJ(i) Xor m
Next
'  将异或运算后的二进制数组保存在 cWJ2 中
nWJ2 = FreeFile
Open cWJ2 For Binary As #nWJ2
Put nWJ2, , bWJ
Close #nWJ2
JiaMi_XOR = True
End If
Exit Function
CW000:
cc = "加密过程出错:" & Err.Description
MsgBox cc, 0 + 64, "系统提示"
End Function
' 解密函数:JieMi_XOR(cWJ1, cWJ2)
' 解密成功返回【True】;否则返回【False】。
Private Function JieMi_XOR( _
ByVal cWJ1 As String, _
ByVal cWJ2 As String) As Boolean
Dim n1 As Integer, n2 As Integer
Dim m As Integer, cc As String
Dim i As Long, nCD As Long
Dim nWJ1 As Integer, nWJ2 As Integer
Dim bWJ() As Byte
On Error GoTo CW000
' 找出 cWJ2 右边第一个反斜杠的位置:n1
n2 = Len(cWJ2)
For i = n2 To 1 Step -1
cc = Mid(cWJ2, i, 1)
If cc = Chr(92) Then
n1 = i + 1
Exit For
End If
Next
' 由 cWJ2 生成密码(m)
n2 = Len(cWJ2): cc = ""
For i = n1 To n2
cc = cc & CStr(Abs(Asc(Mid(cWJ2, i, 1))))
Next
n2 = Len(cc): m = 0
For i = 1 To n2
m = m + Val(Mid(cc, i, 1))
Next
Do While m > 127: m = m - 127: Loop
' 开始解密操作
JieMi_XOR = False
nWJ2 = FreeFile
Open cWJ2 For Binary As #nWJ2
nCD = LOF(nWJ2)
cc = CStr(nCD) & "&" & CStr(m)
' MsgBox cc, 0 + 64, "文件长度"
If nCD = 0 Then
cc = cWJ2 & vbCrLf & vbCrLf
cc = cc & "文件内容为空,退出解密!"
MsgBox cc, 0 + 64, "系统提示"
Else
'  将 cWJ2 导入二进制数组
ReDim bWJ(nCD - 1) As Byte
Get nWJ2, , bWJ()
Close #nWJ2
'  将二进制数组进行异或运算
For i = LBound(bWJ) To UBound(bWJ)
bWJ(i) = bWJ(i) Xor m
Next
'  将异或运算后的二进制数组保存在 cWJ1 中
nWJ1 = FreeFile
Open cWJ1 For Binary As #nWJ1
Put nWJ1, , bWJ
Close #nWJ1
JieMi_XOR = True
End If
Exit Function
CW000:
cc = "解密过程出错:" & Err.Description
MsgBox cc, 0 + 64, "系统提示"
End Function
' -------------------------------------------
2020年07月03日 02点07分 5
1