2014-11-08 70 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;