【问题标题】:Encoding a message with Vigenere cipher in Delphi?在 Delphi 中使用 Vigenere 密码编码消息?
【发布时间】:2014-11-08 06:51:16
【问题描述】:

我想通过为字母表中的每个字母分配一个数值来使用简单的 Vigenere 密码来加密消息,例如A = 1; B= 2;..Z= 26. 问题是我不知道使用哪个函数来识别字符串中的字符(因为它是必须编码的消息,带有空格),然后给它一个特定的数值。

接下来,必须将该数字消息转换为二进制,这很容易,但是如何将字符串消息转换为整数(除 StrToInt 函数之外)?

我只需要知道 Vigenere Cipher 使用哪个函数。 *我还在上高中,所以我提前为使用错误的术语道歉。

【问题讨论】:

  • 那么,空间是如何编码的?那么标点符号呢?你应该直接去二进制。这不是加密。
  • 我会为空格和标点使用不同的数值,而且我必须同时使用这两种编码类型,因为这个赋值的要求规定了这一点。
  • 例如,使用 case 语句,并直接映射到字节数组。我建议你尝试一下你的任务。或者至少弄清楚你被困在哪里。例如,您知道如何读取字符串的第 i 个字符吗?你知道如何制作动态数组吗?你知道什么是案例陈述吗?你写过代码吗?
  • 好吧,我就用case语句,但不是有限制吗?我可以使用 26 个以上的箱子吗?
  • @SilverWarior,这是另一个 Borkadero 的内容错误,查看描述,它正确地说明了结果的维度。 Ord 从一开始就与 WideChar 合作。实际上,WideChar 类型不需要特别支持,因为它是一个序数类型。

标签: function delphi delphi-2010 vigenere


【解决方案1】:

您可以使用 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;

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多