Encryption 维根è;qbasic中的重加密

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]的数字。然后您将按照您所述执行加密/解密

如何在不使用数组的情况下用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]的数字。然后您将按照您所述执行加密/解密。要获取有效的字符值,请反转并添加
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%

欢迎来到堆栈溢出。请阅读。请将问题包括在内。