我想通过为字母表中的每个字母分配一个数值,例如 A=1; 来使用简单的 Vigenere 密码来加密消息。B= 2;..Z= 26. 问题是我不知道使用哪个函数来识别字符串中的字符(因为它是必须编码的消息,带有空格),然后给它一个特定的数值。
接下来,必须将该数字消息转换为二进制,这很容易,但是如何将那个字符串消息转换为整数(除 StrToInt 函数之外)?
我只需要知道 Vigenere Cipher 使用哪个函数。*我还在上高中,所以我提前为使用错误的术语道歉。
我想通过为字母表中的每个字母分配一个数值,例如 A=1; 来使用简单的 Vigenere 密码来加密消息。B= 2;..Z= 26. 问题是我不知道使用哪个函数来识别字符串中的字符(因为它是必须编码的消息,带有空格),然后给它一个特定的数值。
接下来,必须将该数字消息转换为二进制,这很容易,但是如何将那个字符串消息转换为整数(除 StrToInt 函数之外)?
我只需要知道 Vigenere Cipher 使用哪个函数。*我还在上高中,所以我提前为使用错误的术语道歉。
您可以使用 case 语句来执行编码。
function EncodedChar(C: Char): Byte;
begin
case C of
'A'..'Z':
Result := 1 + ord(C) - ord('A');
' ':
Result := ???;
',':
Result := ???;
... // more cases here
else
raise ECannotEncodeThisCharacter.Create(...);
end;
end;
用for
循环编码一个字符串:
function EncodedString(const S: string): TBytes;
var
i: Integer;
begin
SetLength(Result, Length(S));
for i := 1 to Length(S) do begin
// dynamic arrays are 0-based, strings are 1-based, go figure!
Result[i-1] := EncodedChar(S[i]);
end;
end;