Encryption 维根è;qbasic中的重加密
如何在不使用数组的情况下用Qbasic编写Vigenère加密?Encryption 维根è;qbasic中的重加密,encryption,qbasic,Encryption,Qbasic,如何在不使用数组的情况下用Qbasic编写Vigenère加密? 我理解加密消息的数学方法: Ca = Ma + Kb (mod 26) Ma = Ca – Kb (mod 26). 要解密消息,请执行以下操作: Ca = Ma + Kb (mod 26) Ma = Ca – Kb (mod 26). 我正在努力学习语法,因为我在网上没有找到太多信息。您只需将字符的ASCII值作为一个数字,然后减去a的字符值即可。您将获得一个范围为[0,26]的数字。然后您将按照您所述执行加密/解密
我理解加密消息的数学方法:
Ca = Ma + Kb (mod 26)
Ma = Ca – Kb (mod 26).
要解密消息,请执行以下操作:
Ca = Ma + Kb (mod 26)
Ma = Ca – Kb (mod 26).
我正在努力学习语法,因为我在网上没有找到太多信息。您只需将字符的ASCII值作为一个数字,然后减去
a
的字符值即可。您将获得一个范围为[0,26]的数字。然后您将按照您所述执行加密/解密。要获取有效的字符值,请反转并添加a
的值。这是有效的,因为英文字母表(ABC)的字母是按ASCII顺序列出的
要获取密文或明文,只需对字符串中的所有字符进行迭代(可能是在检查它不包含任何其他字符之后),然后将加密/解密的字符附加到新字符串,最后返回该字符串。Viola,没有数组,只有字符串、字符和数值
这就是所有的人。您可以轻松地解决这个问题,而无需使用任何数组。
下面是我的全部(Q)基本解决方案
MID$
函数从字符串中提取一个字符,而ASC
函数将该字符转换为ASCII码。减去65将产生一个范围为[0,25]的数字。使用CHR$
函数将加密的数字转换回字符。此后使用MID$
语句将加密的字符放回字符串中。由于消息和加密密钥之间的长度不同,需要一个单独的迭代变量(
j%
)来重复遍历密钥字符串
msg$ = "ENCRYPTION"
PRINT msg$
key$ = "CLINTON"
k% = LEN(key$)
j% = 1
FOR i% = 1 TO LEN(msg$)
a% = (ASC(MID$(msg$, i%, 1)) - 65) + (ASC(MID$(key$, j%, 1)) -65)
MID$(msg$, i%) = CHR$(65 + a% + 26 * (a% > 25))
j% = j% + 1 + k% * (j% = k%)
NEXT i%
PRINT msg$
上面的代码片段可以不使用一个-65
和一个+65
,但为了清晰起见,我将它们保留了下来
解密过程非常相似。只需3个小改动:
j% = 1
FOR i% = 1 TO LEN(msg$)
a% = (ASC(MID$(msg$, i%, 1)) - 65) - (ASC(MID$(key$, j%, 1)) -65)
MID$(msg$, i%) = CHR$(65 + a% - 26 * (a% < 0))
j% = j% + 1 + k% * (j% = k%)
NEXT i%
PRINT msg$
如果a%
变量大于25,我们需要减去26。尽管如此,
(a%+26*(a%>25))
表单使用了加法
这是因为真实条件的计算结果为-1
- 如果
为真,我们得到a%>25
->(a%+26*-1)
a%-26
- 如果
为假,我们得到a%>25
->(a%+26*0)
a%