Option ExplicitFunction KaiSa(ByVal s As String, ByVal Key As Integer) As String Dim iLoop As Long KaiSa = "" For iLoop = 1 To Len(s) KaiSa = KaiSa + Chr(Asc(Mid(s, iLoop, 1)) + Key) Next iLoop End Function Private Sub Form_Load() Dim s As String Dim t As String s = "你好! Hello!" t = KaiSa(s, 1) '加密 Debug.Print t s = KaiSa(t, -1) '解密 Debug.Print s End End Sub
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P Q R S T U V W X Y恺撒密码表...
“但是我使用的 key=13,处理"日"字时无法还原啊.因为ascii码加了13就超出可以显示的范围了啊.”我测试下来没问题啊,测试代码: Private Sub Form_Load() Dim s As String Dim t As String s = "你好! Hello!123890日" t = KaiSa(s, 13) '加密 Debug.Print t s = KaiSa(t, -13) '解密 Debug.Print s End End Sub运行结果: 酿盒.-Uryy|.>?@EF=肉 你好! Hello!123890日
有些子还是不行啊,例如:key=5,处理"日"字时无法还原啊
错了,应该是: 例如:key=5,处理"汽"或“国”时无法还原啊
修改一下, 改成按字节处理:Option ExplicitFunction KaiSa(ByVal s As String, ByVal Key As Integer) As String Dim iLoop As Long KaiSa = "" For iLoop = 1 To LenB(s) KaiSa = KaiSa & ChrB((AscB(MidB(s, iLoop, 1)) + Key + 256) Mod 256) Next iLoop End FunctionPrivate Sub Form_Load() Dim s As String Dim t As String s = "汽国! Hello!" t = KaiSa(s, 5) '加密 Debug.Print t s = KaiSa(t, -5) '解密 Debug.Print s End End Sub
Dim iLoop As Long
KaiSa = ""
For iLoop = 1 To Len(s)
KaiSa = KaiSa + Chr(Asc(Mid(s, iLoop, 1)) + Key)
Next iLoop
End Function
Private Sub Form_Load()
Dim s As String
Dim t As String
s = "你好! Hello!"
t = KaiSa(s, 1) '加密
Debug.Print t
s = KaiSa(t, -1) '解密
Debug.Print s
End
End Sub
先谢谢秀峰大哥,但是你这个算法对于很多双字节的比如说"日"不起作用啊
再求
不会啊,在VB中,字符是以Unicode存放的,汉字和英文字符都是双字节的,处理起来没什么区别的。
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y恺撒密码表...
Private Sub Form_Load()
Dim s As String
Dim t As String
s = "你好! Hello!123890日"
t = KaiSa(s, 13) '加密
Debug.Print t
s = KaiSa(t, -13) '解密
Debug.Print s
End
End Sub运行结果:
酿盒.-Uryy|.>?@EF=肉
你好! Hello!123890日
例如:key=5,处理"汽"或“国”时无法还原啊
Dim iLoop As Long
KaiSa = ""
For iLoop = 1 To LenB(s)
KaiSa = KaiSa & ChrB((AscB(MidB(s, iLoop, 1)) + Key + 256) Mod 256)
Next iLoop
End FunctionPrivate Sub Form_Load()
Dim s As String
Dim t As String
s = "汽国! Hello!"
t = KaiSa(s, 5) '加密
Debug.Print t
s = KaiSa(t, -5) '解密
Debug.Print s
End
End Sub