中易网

修改一个VB移位字符串能加密或解密

答案:1  悬赏:10  
解决时间 2021-04-28 17:14
  • 提问者网友:风华是一指流沙
  • 2021-04-28 00:15
以下代码是一个字符串位移加密解密源码
要求修改加密算法,有一个位移数 X1
要求,加密每个字母位移,字母的序号加上位移数
例:明文abcd 密钥为2
密文dfhg

主要是有一个循环的要怎么办26一循环明文一长了就超出26了要做一个循环
原来的源码如下,希望有能力的人事帮改一下,谢谢了
'加密
Private Function EncryptCode(ByVal sSourceCode As String, ByVal iPosition As Integer)
Dim I As Integer
Dim Char As String
Dim sTargetCode As String
For I = 1 To Len(sSourceCode)
Char = Mid(sSourceCode, I, 1)
sTargetCode = sTargetCode & Chr(Asc(Char) + iPosition)
Next I
EncryptCode = sTargetCode
End Function
'解密
Private Function RevertCode(ByVal sTargetCode As String, ByVal iPosition As Integer)
Dim I As Integer
Dim Char As String
Dim sSourceCode As String
For I = 1 To Len(sTargetCode)
Char = Mid(sTargetCode, I, 1)
sSourceCode = sSourceCode & Chr(Asc(Char) - iPosition)
Next I
RevertCode = sSourceCode
End Functio
不符合要求呀,你那个根本就没有动态的增加位移数。比如第一个字母位移2+1个,第二个字母位移2+2个……第N个字母位移2+N个,麻烦你想想再改改好吗
非常感谢。这样能实现我的要求了。代码大部分我都明白,不明白的就是,为什么要除以26取余再减65呢,然后再除以26取余数,这样一来回有什么用呢,我有点不明白,能告诉我吗。大部分我都明白就是那个26一循环我不太明白怎么实现的,能说说吗,我追加分可以
最佳答案
  • 二级知识专家网友:强势废物
  • 2021-04-28 00:34
以下改过的编码及解码在输入时不区分大小写.输出全部为大写.看符合你的要求不:

=========二次修改==================
Private Function EncryptCode(ByVal sSourceCode As String, ByVal iPosition As Integer)
sSourceCode = UCase(sSourceCode)
Dim I As Integer
Dim Char As String
Dim sTargetCode As String
j = 0
For I = 1 To Len(sSourceCode)
Char = Mid(sSourceCode, I, 1)
sTargetCode = sTargetCode & Chr(65 + (Asc(Char) + (iPosition + j) Mod 26 - 65) Mod 26)
j = j + 1
Next I
EncryptCode = sTargetCode
End Function
'解密
Private Function RevertCode(ByVal sTargetCode As String, ByVal iPosition As Integer)
sTargetCode = UCase(sTargetCode)
Dim I As Integer
Dim Char As String
Dim sSourceCode As String
j = 0
For I = 1 To Len(sTargetCode)
Char = Mid(sTargetCode, I, 1)
If (Asc(Char) - (iPosition + j) Mod 26) < 65 Then
sSourceCode = sSourceCode & Chr(65 + (Asc(Char) - (iPosition + j) Mod 26 - 39) Mod 26)
Else
sSourceCode = sSourceCode & Chr(65 + (Asc(Char) - (iPosition + j) Mod 26 - 65) Mod 26)
End If
j = j + 1
Next I
RevertCode = sSourceCode
End Function
================================================
65 + (Asc(Char) + (iPosition + j) Mod 26 - 65) Mod 26
1. (iPosition + j) Mod 26 目的是当偏移位置超过26时折回, 如偏移27个位置, 27 mod 26=1 ,实际在0~25的序列中就是偏移1个位置
2. 65是"A"的ascii码,它是26个大写字母的开始位置.公式中-65及第二个mod 26 是为了得到加偏移后字符在A~Z(0~25)序列间的位置.

3. 65+(0~25)间的偏移位置,就是转换后字符的ascii码.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息