1) Basiese enkripsie met die verandering van
ordinale waardes van karakters
Verander teks deur die ORD-funksie te gebruik wat die ordinale (heelgetal)
waarde van enige ASCII-karakter gee. Voeg dan 4 (of enige ander getal) by
hierdie waarde en skryf die karakter terug deur die CHR-funksie te gebruik (wat
die ASCII-karakter vir 'n bepaalde getalwaarde gee).
Byvoorbeeld die karakter 'a' sal 'e' word en 'b' sal 'f' word -
karakters word vervang met die volgende karakter vier plekke vorentoe:
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
{ |
¦ |
} |
~ |
Die ordinale waarde van 'a', wat 97 is, word
vermeerder na 101 (die ordinale waarde van 'e').
'n Moontlike oplossing vir hierdie program is waar die waardes geënkodeer
word deur die ordinale waarde van elke karakter met vier te vermeerder en dit
dan weer gedekodeer word na die oorspronklike teks:
procedure TForm1.Button1Click(Sender: TObject);
var
sInput : String;
iCount, iLength : Integer;
begin
sInput := Edit1.Text;
iLength := Length(sInput);
form1.caption := chr(101);
FOR iCount := 1 to iLength do
begin
sInput[iCount] := chr(ord(sInput[iCount])+4);
//Enkodering
end;
Label1.caption := sInput; //Vertoon geënkodeerde teks
//Dekodering
//Sal gewoonlik in aparte prosedure geplaas word
FOR iCount := 1 to iLength do
begin
sInput[iCount] := chr(ord(sInput[iCount])-4);
end;
Label2.caption := sInput;
end;
end.
2) Enkripsie met teks in 'n twee dimensionele
skikking
Bereken die lengte van 'n boodskap en rond dit af tot die volgende veelvoud van
tien. Skryf die boodskap in rye van tien karakters elk. Die boodskap word dan
gelees van bo na onder in die kolomme en dan van links na regs om die
geënkodeerde teks te skep.
Die hutskarakter (hash / #) vervang al die spasies en vul die teks op tot 'n
veelvoud van tien.
Byvoorbeeld die teks: "This is an encryption program that encodes text."
sal voorgestel word as:
T |
h |
i |
s |
# |
i |
s |
# |
a |
n |
# |
e |
n |
c |
r |
y |
p |
t |
i |
o |
n |
# |
p |
r |
o |
g |
r |
a |
m |
# |
t |
h |
a |
t |
# |
e |
n |
c |
o |
d |
e |
s |
# |
t |
e |
x |
t |
. |
# |
# |
Die teks bestaan uit 48 karakters (met spasies tussenin) daarom moet twee
hutskarakters aan die einde bygevoeg word om die tekslengte tot 50 af te rond.
Om die geënkodeerde boodskap te kry word die teks dan van bo tot onder en dan van links
na regs gelees.
Die geënkodeerde teks is dan:
T#ntehe#hsinpa#scrtt#ro#eiygexsprnt#tac.aimo#no#d#
'n Moontlike oplossing vir hierdie voorbeeld is:
var
Form1: TForm1;
arrMessage : array[1..10,1..100] of char; //2D-skikking
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
sInput, sEncode : String;
iCount, iLength, iHashNeed, iRow, iCol, iTotal, iWCount : Integer;
begin
RichEdit1.Clear;
iHashNeed := 0;
sInput := Edit1.Text;
iLength := Length(sInput);
if iLength MOD 10 <> 0 then //Bepaal of # nodig is
begin
iHashNeed := (((iLength DIV 10) + 1) * 10) - iLength;
FOR iCount := 1 to iHashNeed DO
sInput := sInput + '#'
end;
FOR iCount := 1 to iLength DO //Verander spasies na #'e
begin
if sInput[iCount] = ' ' then
sInput[iCount] := '#';
end;
iTotal := length(sInput) DIV 10;
iWCount := 0;
//Boodskap word in 10 kolomme gelees
FOR iRow := 1 to iTotal do
begin
FOR iCol := 1 to 10 do
begin
iWCount := iWCount + 1;
arrMessage[iCol, iRow] := sInput[iWCount];
end;
end;
//Lees boodskap en vertoon in een lyn
sEncode := '';
FOR iCol := 1 to 10 do
begin
FOR iRow := 1 to iTotal do
begin
sEncode := sEncode + arrMessage[iCol, iRow]
end;
end;
RichEdit1.Lines.add(sEncode);
end;
end.
Voorbeeldoefeninge
a) Gebruik voorbeeld 2 en skep 'n program wat 'n geskepte funksie gebruik wat
die ingevoegde teks enkodeer. Die gebruiker moet ook die aantal kolomme wat
gebruik is, spesifiseer.
b) Skep 'n program waarin 'n tekslêer sowel as 'n nuwe lêernaam aangedui kan
word. Die prorgram moet dan die boodskap in die tekslêer enkodeer en skryf na
die nuwe lêer.
|