2014-11-08 36 views
0

我想用简单的Vigenere密码加密一条消息,方法是给字母表中的每个字母赋一个数字值,例如: A = 1; B = 2; .. Z = 26。问题是我不知道使用哪个函数来识别字符串中的字符(因为它是必须被编码的消息,用空格填充),然后给它一个特定的数字值。在Delphi中使用Vigenere密码编码消息?

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

我只需要知道哪个函数用于Vigenere密码。 *我仍然在高中,所以我提前道歉使用错误的条款。

+0

嘛,怎么是空间编码?那标点符号呢?你应该直接去二进制。这不是加密。 – 2014-11-08 07:33:50

+0

我将对空格和标点使用不同的数值,并且我必须使用两种编码类型,因为此作业的要求规定了这一点。 – 2014-11-08 08:10:12

+0

例如,使用case语句,并直接映射到字节数组。我建议你尝试一下你的任务。或者至少说清楚你卡在哪里。例如,你知道如何读取字符串的第i个字符吗?你知道如何制作动态数组吗?你知道案件陈述是什么吗?你有没有写过任何代码? – 2014-11-08 08:13:01

回答

0

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