ΠΠ΅ΡΠΎΠ΄Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ° ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π ΠΎΡΡΠΈΠΉΡΠΊΠΎΠΉ Π€Π΅Π΄Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅, ΠΎΠ·Π°Π³Π»Π°Π²Π»Π΅Π½Π½ΠΎΠΌ «ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΠ‘Π’ 28 147−89». Π’ΠΎ, ΡΡΠΎ Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π° «ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅» ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅Π΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅ «ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ «, Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. ΠΠΎΠΌΠΈΠΌΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΎΠ΄ΠΈΠ½… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ΅ΡΠΎΠ΄Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 1. ΠΠ΅ΡΠΎΠ΄ Π·ΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠΆΠ°ΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
ΠΡΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΠΠ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΡΠΊΠ²Π΅ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ 8 Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΡΠ°Π·ΡΡΠ΄ΠΎΠ² (Π±Π°ΠΉΡ), ΠΈΠ±ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΉ Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΆΠ°ΡΠΈΡ Π±ΡΠΊΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΆΠ΅ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ 8 Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΡΠ°Π·ΡΡΠ΄ΠΎΠ², ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π±Π°ΠΉΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡ ΠΈΠ· 256 Π±ΡΠΊΠ², ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π°Π»ΡΠ°Π²ΠΈΡΡ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΈΡΡΠ°ΠΌΠΈ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ 50−60 Π·Π½Π°ΠΊΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ ΠΈ 50−60 Π·Π½Π°ΠΊΠΎΠ² ΡΡΠ΅Π±ΡΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΈΠ»ΠΈ 5−6-Π±ΠΈΡΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΡΠ΅ΠΉΠΊΠΈ. Π’Π°ΠΊΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ 2−3-Ρ Π±ΠΈΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π»ΠΈΡΡ 4−8 Π±ΡΠΊΠ² (Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ).
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π Π±Π°ΠΉΡΠ° Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΡΠΊΠ² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ°, Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΡΠΎΠΌ 16-ΡΠΈ-Π±ΡΠΊΠ²Π΅Π½Π½ΠΎΠΌ (m=16) Π°Π»ΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎ n=2 Π±ΡΠΊΠ²Ρ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌ ΡΠ»ΠΎΠ²Π΅. Π’ΠΎΠ³Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ΅ ΠΆΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΠΎΠ΄ΠΎΠ²ΡΠ΅ ΡΠ»ΠΎΠ²Π° Π²ΠΎ Π²ΡΠΎΡΠΈΡΠ½ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ΅ Π±ΡΠ΄Π΅ΠΌ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ 4 ΡΠ°Π·ΡΡΠ΄Π° Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π·ΠΎΠ½Ρ, Π° Π²ΡΠΎΡΡΠ΅ 4 — ΡΠΈΡΡΡ. Π§ΠΈΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ Π²ΡΠΎΡΠΈΡΠ½ΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ° Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΌΠ΅Π½ΡΡΠΈΡΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ N=313=39 (4 Π·ΠΎΠ½Ρ Π΄Π°Π»ΠΈ Π±Ρ 124=48; ΠΏΡΡΡ — 115=55 ΠΈ Ρ. Π΄.), Π½ΠΎ Π·Π°ΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π²ΡΠΎΡΠΈΡΠ½ΡΠΉ Π°Π»ΡΠ°Π²ΠΈΡ Π΄Π°Π΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ 4-Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π·ΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ΄Π΅Ρ Π·ΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠΆΠ°ΡΠΈΡ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠΊΠ²Ρ Π²ΡΠΎΡΠΈΡΠ½ΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ° ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ Π·ΠΎΠ½Π°ΠΌ, ΠΈ Π΅ΡΠ»ΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠ΄ΠΎΠΌ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π±ΡΠΊΠ²Ρ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π·ΠΎΠ½Π΅, ΡΠΎ Π½ΠΎΠΌΠ΅Ρ Π΅Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ, Π° Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π±ΡΠΊΠ² ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡΡ ΠΈΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ.
ΠΡΠ»ΠΈ ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΡΡΠΎΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π±ΡΠΊΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±ΡΠΊΠ²Π΅Π½Π½ΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΉ, ΡΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΡΠ΅ ΡΠ»ΠΎΠ²Π° Π²ΠΎ Π²ΡΠΎΡΠΈΡΠ½ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ 1 (Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠΎΡΡ Π±ΡΠΊΠ²Ρ Π² ΡΡΡΡΠΊΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅).
ΠΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠΆΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π±Π°ΠΉΡΠΎΠ² Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅ n1 ΠΊ ΡΠΈΡΠ»Ρ Π±Π°ΠΉΡΠΎΠ² Π² ΡΠΆΠ°ΡΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅ n2 :
ΠΡΠΆ = n1 / n2.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠ»Π°ΡΡ Letter, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π΅, ΡΠ°ΡΡΠΎΡΠ΅, Π΅Π³ΠΎ Π³ΡΡΠΏΠΏΠ΅ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π² Π²Ρ ΠΎΠ΄Π½ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ΅.
public class Letter
{
final char _symbol;
final float _frequency;
final char _group;
final int _index;
public char getSymbol ()
{
return _symbol;
}
public float getFreq ()
{
return _frequency;
}
public char getGroup ()
{
return _group;
}
public int getIndex ()
{
return _index;
}
Letter (char symbol, float frequency, char group, int index)
{
_symbol = symbol;
_frequency = frequency;
_group = group;
_index = index;
}
};
ΠΠ»Π°ΡΡ DefaultAlphabet, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅ΡΡΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠΌ Π°Π»ΡΠ°Π²ΠΈΡΠ΅:
public class DefaultAlphabet
{
public static final char characters[]=
{'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', ',',
'.', ';', ':', '!',
'?', '-', ' '};
public static int getId (char ch)
{
char chbuf = 'a';
int id=0;
while (ch≠chbuf)
{
id++;
chbuf=DefaultAlphabet.characters[id];
}
return id;
}
}
ΠΠ»Π°ΡΡ BlockSwap, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΏΠ°ΡΡΠΈΠ½Π³ ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ:
public class BlockSwap {
char phraseArray[];
short freq[];
int alphabetLength;
int innerAlphabetLength;
int phraseLength;
Letter innerAlphabet[];
public BlockSwap ()
{
alphabetLength = DefaultAlphabet.characters.length;
freq = new short[alphabetLength];
}
public void parse (String phrase)
{
prepare (phrase);
getPhrase ();
createInnerAlphabet ();
printInnerAlphabet ();
printInfo ();
}
private void prepare (String phrase)
{
System.out.print (phrase+" n");
phraseLength = phrase. length ();
phraseArray = phrase. toCharArray ();
}
private void getPhrase ()
{
innerAlphabetLength=0;
for (int i = 0; i
{
char symbol = phraseArray[i];
int number = DefaultAlphabet. getId (symbol);
if (freq[number]==0) innerAlphabetLength++;
freq[number]++;
}
}
private void createInnerAlphabet ()
{
innerAlphabet = new Letter[innerAlphabetLength];
int pointer=0;
int groups = (int)Math.ceil ((double)innerAlphabetLength/16);;
for (int i = 0; i < alphabetLength; i++)
{
if (freq[i]>0)
{
int group = pointer%groups;
int index = pointer/groups;
Letter buffer = new Letter (DefaultAlphabet.characters[i], (float)(freq[i])/phraseLength, DefaultAlphabet. characters[group], index);
innerAlphabet[pointer] = buffer;
pointer++;
}
}
}
private void printInnerAlphabet ()
{
for (int i = 0; i< innerAlphabetLength; i++)
{
StringBuilder sb = new StringBuilder (32);
sb.append (i);
sb.append («) '»);
sb.append (innerAlphabet[i]. getSymbol ());
sb.append («' at «);
sb.append (innerAlphabet[i]. getFreq ());
sb.append («: «);
sb.append (innerAlphabet[i]. getGroup ());
sb.append (innerAlphabet[i].getIndex ());
sb.append («n»);
System.out.printf (sb.toString ());
}
}
private void printInfo ()
{
StringBuilder message = new StringBuilder (32);
double size = 0;
char previous = 'z';
for (int i = 0; i
{
if (phraseArray[i]=='.')
{
message.append ('.');
continue;
}
int j = 0;
while (phraseArray[i]≠innerAlphabet[j]. getSymbol ())
{
j++;
}
if (innerAlphabet[j].getGroup ()≠previous)
{
size+=0.5;
previous = innerAlphabet[j]. getGroup ();
message.append (innerAlphabet[j].getGroup ());
}
size+=0.5;
message.append (innerAlphabet[j].getIndex ());
}
message.append («n ΠΠΎΠ΅Ρ. ΡΠΆΠ°ΡΠΈΡ ΡΠΎΡΡΠ°Π²ΠΈΠ»: «+(double)phraseLength/size);
System.out.print (message.toString ());
}
ΠΡΠΈΠΌΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ»Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ «just test it. And all I can say now: hello world!» ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠΆΠ°ΡΠΈΡ ΡΠΎΡΡΠ°Π²ΠΈΠ» ΠΎΠΊΠΎΠ»ΠΎ 1.127:
ΠΠ»Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ «my name is evgeniy gennadievich and its my first java application xd» ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠΆΠ°ΡΠΈΡ ΡΠΎcΡΠ°Π²ΠΈΠ» ΠΎΠΊΠΎΠ»ΠΎ 1.32:
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 2. RSA
RSA ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ Π°ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΊΠ»ΡΡΠΎΠΌ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΠΊΠΈ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡΡΠ΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠ΅ΠΌ (ΡΠ°ΠΊ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ) ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ, Π΄ΡΡΠ³ΠΎΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π΅Π³ΠΎ Ρ ΠΎΠ·ΡΠΈΠ½Π° ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π½ΠΈΠΊΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΌΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½Ρ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, ΡΠΎ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΠΌΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡΡΠ΅ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ) Π½Π°ΠΉΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΡΡ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡ ΠΊΠ»ΡΡΠ° Π²ΡΡΠΎΠΊΠ°.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ RSA
ΠΠ»Π³ΠΎΡΠΈΡΠΌ RSA ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ²:
1. ΠΡΠ±ΡΠ°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΠΈΡΠ»Π° p ΠΈ q
2. ΠΡΡΠΈΡΠ»ΠΈΡΡ n = p * q
3. ΠΡΡΠΈΡΠ»ΠΈΡΡ m = (p — 1) * (q — 1)
4. ΠΡΠ±ΡΠ°ΡΡ ΡΠΈΡΠ»ΠΎ d Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ Ρ m
5. ΠΡΠ±ΡΠ°ΡΡ ΡΠΈΡΠ»ΠΎ e ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ e * d = 1 (mod m)
Π§ΠΈΡΠ»Π° e ΠΈ d ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ»ΡΡΠ°ΠΌΠΈ RSA. Π¨ΠΈΡΡΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·Π±ΠΈΡΡ Π½Π° Π±Π»ΠΎΠΊΠΈ — ΡΠΈΡΠ»Π° ΠΎΡ 0 Π΄ΠΎ n — 1. Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Β· Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅: b = ae (mod n)
Β· ΠΠ΅ΡΠΈΡΡΠΎΠ²ΠΊΠ°: a = bd (mod n)
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠ»ΡΡΠΈ e ΠΈ d ΡΠ°Π²Π½ΠΎΠΏΡΠ°Π²Π½Ρ, Ρ. Π΅. ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΡΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡΡΠΎΠΌ e, ΡΠ°ΠΊ ΠΈ ΠΊΠ»ΡΡΠΎΠΌ d, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ad (mod m):
1. Π§ΠΈΡΠ»ΠΎ d ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ:
d = d0 * 2r +… + dr - 1 * 2 + dr,
Π³Π΄Π΅ di — ΡΠΈΡΡΡ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΡΠ°Π²Π½ΡΠ΅ 0 ΠΈΠ»ΠΈ 1, d0 = 1
2. ΠΠΎΠ»ΠΎΠΆΠΈΡΡ a0 = a, Π·Π°ΡΠ΅ΠΌ Π΄Π»Ρ i = 1,…, r Π²ΡΡΠΈΡΠ»ΠΈΡΡ
ai = (ai - 1) 2 * adi (mod m)
3. ar Π΅ΡΡΡ ΠΈΡΠΊΠΎΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ad (mod m)
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΠ²ΠΊΠ»ΠΈΠ΄Π°
1. ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΡΠ»Π° a ΠΈ b
2. ΠΡΡΠΈΡΠ»ΠΈΡΡ r — ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ a Π½Π° b: a = b * q + r
3. ΠΡΠ»ΠΈ r = 0, ΡΠΎ b — ΠΈΡΠΊΠΎΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ (Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ ΠΎΠ±ΡΠΈΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ), ΠΊΠΎΠ½Π΅Ρ
4. ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΡ ΡΠΈΡΠ΅Π» ΠΏΠ°ΡΠΎΠΉ , ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΡΠ½ΠΊΡΡ 2 ΠΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ²ΠΊΠ»ΠΈΠ΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 5 * p ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ ΠΎΡΡΠ°ΡΠΊΠΎΠΌ, Π³Π΄Π΅ p Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡ Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΠΈΠ· ΡΠΈΡΠ΅Π» a ΠΈ b. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ a * x + b * y = 1 1. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ°ΡΡΠΈΡΡ E = 2. ΠΡΡΠΈΡΠ»ΠΈΡΡ r — ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ a Π½Π° b: a = b * q + r 3. ΠΡΠ»ΠΈ r = 0, ΡΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΡΠΎΠ»Π±Π΅Ρ ΠΌΠ°ΡΡΠΈΡΡ Π΄Π°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Π΅Ρ 4. E = E * 5. ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΡ ΡΠΈΡΠ΅Π» Π Π΄Π°Π½Π½ΠΎΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΈΠ· ΡΠΈΡΠ΅Π» a ΠΈ b. ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎq Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΏΡΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ ΡΠΈΡΠ»Π° q ΠΈΠ· ΡΠΈΡΠ»Π°, Π²Π·ΡΡΠΎΠ³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΈΠ· ΡΠΈΡΠ΅Π» a ΠΈ b Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΠ»ΠΎ b, ΡΠΎ Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΈΡΠ»Π° b, ΠΏΡΠΈ ΡΡΠΎΠΌq Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ b — q. Π‘ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΡ
ΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π²Π½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ²ΠΊΠ»ΠΈΠ΄Π°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠ»Π°ΡΡ RsaEncoder Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈ Π΄Π΅ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΎΡΠΊΡΡΡΠΎΠΌΡ ΠΊΠ»ΡΡΡ. public class RsaEncoder { private long p, q, module, Fi; public long openKey, closeKey; public RsaEncoder (long openKey) throws KeyException { p = 3557; q = 2579; module = p * q; Fi = (p-1)*(q-1); this.openKey = openKey; if (openKey>Fi) throw new KeyException («Key is too long»); closeKey = modInverse (openKey, Fi); } long modInverse (long a, long n) { long i = n, v = 0, d = 1; while (a>0) { long t = i/a, x = a; a = i% x; i = x; x = d; d = v — t*x; v = x; } v%= n; if (v<0) v = (v+n)%n; return v; } public long Encode (long innerInt) { long buf = chinamodpow (innerInt, openKey, module); return buf; } private long chinamodpow (long a, long pow, long n) { long res = 1; for (int i = 0; i < (pow / 2); i++) { res *= ((a * a)% n); res%= n; } if (pow% 2 == 1) res *=a; res%=n; return res; } public long Decode (long innerInt) { long buf = chinamodpow (innerInt, closeKey, module); return buf; } } ΠΡΠΈΠΌΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΡΠΈ ΠΎΡΠΊΡΡΡΠΎΠΌ ΠΊΠ»ΡΡΠ΅ 43: ΠΡΠΈ ΠΎΡΠΊΡΡΡΠΎΠΌ ΠΊΠ»ΡΡΠ΅ 2389 : ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3. ΠΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΠΠ‘Π’ ΠΠΠ‘Π’ 28 147–89 — ΡΠΎΠ²Π΅ΡΡΠΊΠΈΠΉ ΠΈ ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π²Π²Π΅Π΄ΡΠ½Π½ΡΠΉ Π² 1990 Π³ΠΎΠ΄Ρ, ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π‘ΠΠ[1]. ΠΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ — «ΠΠΠ‘Π’ 28 147−89 Π‘ΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ°ΡΠΈΡΠ° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ». ΠΠ»ΠΎΡΠ½ΡΠΉ ΡΠΈΡΡΠΎΠ°Π»Π³ΠΎΡΠΈΡΠΌ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Ρ Π³Π°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΈΡΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π’Π΅ΡΠΌΠΈΠ½Ρ ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ° ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π ΠΎΡΡΠΈΠΉΡΠΊΠΎΠΉ Π€Π΅Π΄Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅, ΠΎΠ·Π°Π³Π»Π°Π²Π»Π΅Π½Π½ΠΎΠΌ «ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΠ‘Π’ 28 147–89». Π’ΠΎ, ΡΡΠΎ Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π° «ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅» ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅Π΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅ «ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ «, Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. ΠΠΎΠΌΠΈΠΌΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π° ΠΎΠ±ΡΠΈΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ
Ρ Π½ΠΈΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠΌΠΈΡΠΎΠ²ΡΡΠ°Π²ΠΊΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ΅ΠΌ ΠΈΠ½ΡΠΌ, ΠΊΠ°ΠΊ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ΄ΠΎΠΌ, Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠΌ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Ρ ΡΠ΅Π»ΡΡ ΠΈΠΌΠΈΡΠΎΠ·Π°ΡΠΈΡΡ, ΠΈΠ»ΠΈ Π·Π°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ
ΠΎΡ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ Π² Π½ΠΈΡ
Π½Π΅ΡΠ°Π½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠ°Π³Π°Ρ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΠΠ‘Π’Π° Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ΠΈ ΠΎΠΏΠ΅ΡΠΈΡΡΡΡ, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
Π±ΠΈΡΠΎΠ², Π² Π΄ΡΡΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
— ΠΊΠ°ΠΊ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π² ΡΡΠ΅ΡΡΠΈΡ
— ΠΊΠ°ΠΊ ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΡΡΡΠΊΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡΡΠ°Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡΡ
. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ
Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ Π·Π°Π³Π»Π°Π²Π½ΡΠΌΠΈ Π»Π°ΡΠΈΠ½ΡΠΊΠΈΠΌΠΈ Π±ΡΠΊΠ²Π°ΠΌΠΈ Ρ Π½Π°ΠΊΠ»ΠΎΠ½Π½ΡΠΌ Π½Π°ΡΠ΅ΡΡΠ°Π½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, X). Π§Π΅ΡΠ΅Π· |X| ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
X Π² Π±ΠΈΡΠ°Ρ
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
X ΠΊΠ°ΠΊ ΡΠ΅Π»ΠΎΠ΅ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ:. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠΎ ΡΡΠΎΡ ΡΠ°ΠΊΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: X=(X 0,X 1,…,Xn —1)=X 0||X 1||…||Xn —1. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
Π² ΠΎΠ΄ΠΈΠ½ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ «||». ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅: |X|=|X 0|+|X 1|+…+|Xn -1|. ΠΡΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈΠ½ΡΡΠ²Π°. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ Π²ΡΠ΅ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΊΠ°ΠΊ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π±Π΅Π· Π·Π½Π°ΠΊΠ°, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ: Π Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
Π±ΠΈΡΠΎΠ², Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΠΈΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΠΌ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ, ΡΡΠΎ ΠΈ ΠΌΠ°ΡΡΠΈΠ², Π½ΠΎ Π² ΡΡΡΠΎΡΠ½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅: X=(x 0,x 1,…,xn —1)=x 0+21Β· x 1+…+2 n-1Β· xn —1. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΄Π»Ρ ΠΠΠ‘Π’Π° ΠΏΡΠΈΠ½ΡΡΠ° Ρ.Π½. «little-endian» Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΠ°Π·ΡΡΠ΄ΠΎΠ², Ρ. Π΅. Π²Π½ΡΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ°Π·ΡΡΠ΄Π½ΡΡ
ΡΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ ΡΠ°Π·ΡΡΠ΄Ρ ΠΈ ΠΈΡ
Π³ΡΡΠΏΠΏΡ Ρ ΠΌΠ΅Π½ΡΡΠΈΠΌΠΈ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΡΠΌΠΈ. ΠΠ± ΡΡΠΎΠΌ ΠΏΡΡΠΌΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π² ΠΏΡΠ½ΠΊΡΠ΅ 1.3 ΡΡΠ°Π½Π΄Π°ΡΡΠ°: «ΠΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΄Π²ΠΈΠ³Π΅ Π΄Π²ΠΎΠΈΡΠ½ΡΡ
Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΡΡΠ°ΡΡΠΈΠΌΠΈ ΡΠ°Π·ΡΡΠ΄Π°ΠΌΠΈ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π·ΡΡΠ΄Ρ Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Π΅ΠΉ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ». ΠΠ°Π»Π΅Π΅, ΠΏΡΠ½ΠΊΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ° 1.4, 2.1.1 ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²-Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Π΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΡΡΡΠ΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΠΌΠ»Π°Π΄ΡΠΈΡ
, Ρ. Π΅. ΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΡΡ
ΡΠ°Π·ΡΡΠ΄ΠΎΠ². Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΡΡ Π² ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Intel x86, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΡΡΠ° Π½Π° Π΄Π°Π½Π½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΡΠ°Π·ΡΡΠ΄ΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ Π½Π°Π΄ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΈΠΌΠ΅ΡΡΠ°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ», ΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π΄Π°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°Π΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ A*B=(a 0*b 0,a 1*b 1,…,an —1*bn —1), Π³Π΄Π΅ n=|A|=|B|, Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ «*» ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½Π°Ρ Π±ΠΈΠ½Π°ΡΠ½Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ; ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΈΠ»ΠΈ, ΠΎΠ½Π° ΠΆΠ΅ — ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ2: ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ° ΠΈ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΠΠ‘Π’Π°. ΠΡΠ»ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π» ΠΠΠ‘Π’ 28 147–89, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΡΠΎΠ²Π½Π΅ΠΉ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΈ Π²ΡΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ Π½ΠΈΡ
ΠΈΠΌΠΈΡΠΎΠ²ΡΡΠ°Π²ΠΊΠΈ. ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½ΠΈΠ·ΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΠΠ‘Π’Π° ΡΠΈΠΊΠ»Π°ΠΌΠΈ. ΠΡΠΈ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΊΠ»Ρ, ΡΡΠΎΠ±Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΠΈΡ
ΠΎΡ Π²ΡΠ΅Ρ
ΠΏΡΠΎΡΠΈΡ
ΡΠΈΠΊΠ»ΠΎΠ². ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΠΈ ΡΠΌΡΡΠ» ΠΈΡ
Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΡΠ½Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅: § ΡΠΈΠΊΠ» Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ (32-Π); § ΡΠΈΠΊΠ» ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ (32-Π ); § ΡΠΈΠΊΠ» Π²ΡΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠΌΠΈΡΠΎΠ²ΡΡΠ°Π²ΠΊΠΈ (16-Π). Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΡΡ
ΡΠΈΠΊΠ»ΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π°Π»Π΅Π΅ Π² Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΠΠ‘Π’Π΅, Π½Π°Π΄ΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π΅ΡΠΈ: § ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π³ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ; § ΠΊΠ°ΠΊ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΠ°Π³ΠΎΠ² ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΊΠ»Ρ; § ΠΊΠ°ΠΊ ΠΈΠ· ΡΡΠ΅Ρ
Π±Π°Π·ΠΎΠ²ΡΡ
ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΠΠ‘Π’Π°. ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ
Π²ΠΎΠΏΡΠΎΡΠΎΠ², ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ ΠΠΠ‘Π’Π°. Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ ΠΠΈΡΡ
Π³ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ Π²ΡΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΠΈΡΠΎΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΡΠΈΡΡΡ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΅ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΡΡΡ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π ΠΠΠ‘Π’Π΅ ΠΊΠ»ΡΡΠ΅Π²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ
. ΠΠΎΠΌΠΈΠΌΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΡΡΠ°, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠΈΡΡΠΎΠ², ΠΎΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅ΡΠ΅ ΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΡΡΡΠΊΡΡΡ ΠΠΠ‘Π’Π°. Β§ ΠΠ»ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΈΠ· Π²ΠΎΡΡΠΌΠΈ 32-Π±ΠΈΡΠΎΠ²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ΄Π°, Π΄Π°Π»Π΅Π΅ Π² Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ K: Π ΠΠΠ‘Π’Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ»ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ°ΠΊ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π±Π΅Π· Π·Π½Π°ΠΊΠ°:. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 32Β· 8=256 Π±ΠΈΡ ΠΈΠ»ΠΈ 32 Π±Π°ΠΉΡΠ°. Β§ Π’Π°Π±Π»ΠΈΡΠ° Π·Π°ΠΌΠ΅Π½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ Π²ΠΎΡΠ΅ΠΌΡ ΡΠ·Π»ΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» Π·Π°ΠΌΠ΅Π½Ρ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΡ 4-Π±ΠΈΡΠΎΠ²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π·Π°ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» ΠΎΡ 0 Π΄ΠΎ 15, Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π·Π°ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ·Π°Π½Ρ Π±ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π±Π»ΠΈΡΠ° Π·Π°ΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° 8×16 ΠΈΠ»ΠΈ 16×8, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ 4-Π±ΠΈΡΠΎΠ²ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (8×16), Π΅Π³ΠΎ-ΡΠΎ ΠΌΡ ΠΈ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ. Π’ΠΎΠ³Π΄Π° ΡΠ·Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ Π±ΡΠ΄ΡΡ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½. Π Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ° Π·Π°ΠΌΠ΅Π½ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ H:. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½ ΡΠ°Π²Π΅Π½: 8 ΡΠ·Π»ΠΎΠ² x 16 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²/ΡΠ·Π΅Π» x 4 Π±ΠΈΡΠ°/ΡΠ»Π΅ΠΌΠ΅Π½Ρ = 512 Π±ΠΈΡ = 64 Π±Π°ΠΉΡΠ°. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π³ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π³ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ 64-Π±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ
. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ 32-Π±ΠΈΡΠΎΠ²ΡΠΉ Π±Π»ΠΎΠΊ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ»ΡΡΠ°. Π‘Ρ
Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1. Π¨Π°Π³ 0 ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΊΡΠΈΠΏΡΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ: Β§ N — ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΡΠΉ 64-Π±ΠΈΡΠΎΠ²ΡΠΉ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ
, Π² Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π³Π° Π΅Π³ΠΎ ΠΌΠ»Π°Π΄ΡΠ°Ρ (N 1) ΠΈ ΡΡΠ°ΡΡΠ°Ρ (N 2) ΡΠ°ΡΡΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ 32-Π±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π±Π΅Π· Π·Π½Π°ΠΊΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ N=(N1,N2). Β§ X — 32-Π±ΠΈΡΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ»ΡΡΠ°; Π¨Π°Π³ 1 Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠ»ΡΡΠΎΠΌ. ΠΠ»Π°Π΄ΡΠ°Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 232 Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π½Π° ΡΠ°Π³Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠ»ΡΡΠ°, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³; Π¨Π°Π³ 2 ΠΠΎΠ±Π»ΠΎΡΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π°. 32-Π±ΠΈΡΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π³Π΅, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· Π²ΠΎΡΡΠΌΠΈ 4-Π±ΠΈΡΠΎΠ²ΡΡ
Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°: S=(S 0, S 1, S 2, S 3, S 4, S 5, S 6, S 7), ΠΏΡΠΈΡΠ΅ΠΌ S 0ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 4 ΡΠ°ΠΌΡΡ
ΠΌΠ»Π°Π΄ΡΠΈΡ
, Π° S 7 — 4 ΡΠ°ΠΌΡΡ
ΡΡΠ°ΡΡΠΈΡ
Π±ΠΈΡΠ° S. ΠΠ°Π»Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π²ΠΎΡΡΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ² Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅ Π·Π°ΠΌΠ΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° Si ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Si-ΡΡΠΉ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ (Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ Ρ Π½ΡΠ»Ρ) i-ΡΠΎΠ³ΠΎ ΡΠ·Π»Π° Π·Π°ΠΌΠ΅Π½Ρ (Ρ.Π΅. i-ΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½, Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Ρ Π½ΡΠ»Ρ). ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅Π½Ρ Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ, ΡΠ°Π²Π½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠ°, ΡΠ°Π²Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠ°ΠΊ 4-Π±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. ΠΡΡΡΠ΄Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½: ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ Π² Π½Π΅ΠΉ ΡΠ°Π²Π½ΠΎ ΡΠΈΡΠ»Ρ 4-Π±ΠΈΡΠΎΠ²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² 32-Π±ΠΈΡΠΎΠ²ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
, ΡΠΎ Π΅ΡΡΡ Π²ΠΎΡΡΠΌΠΈ, Π° ΡΠΈΡΠ»ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ°Π²Π½ΠΎ ΡΠΈΡΠ»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 4-Π±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ
, ΡΠ°Π²Π½ΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ 24, ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈ. Π¨Π°Π³ 3 Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ Π½Π° 11 Π±ΠΈΡ Π²Π»Π΅Π²ΠΎ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π³Π° ΡΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈ Π½Π° 11 Π±ΠΈΡ Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠ°ΡΡΠΈΡ
ΡΠ°Π·ΡΡΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³. ΠΠ° ΡΡ
Π΅ΠΌΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΄Π²ΠΈΠ³Π° ΡΠ²ΠΎΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π½Π° 11 Π±ΠΈΡ Π²Π»Π΅Π²ΠΎ, Ρ. Π΅. Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠ°ΡΡΠΈΡ
ΡΠ°Π·ΡΡΠ΄ΠΎΠ². Π¨Π°Π³ 4 ΠΠΎΠ±ΠΈΡΠΎΠ²ΠΎΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΡΠ°Π³Π΅ 3, ΠΏΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 2 ΡΠΎ ΡΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΎΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. Π¨Π°Π³ 5 Π‘Π΄Π²ΠΈΠ³ ΠΏΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ΅: ΠΌΠ»Π°Π΄ΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠΎ ΡΡΠ°ΡΡΠ΅ΠΉ, Π° Π½Π° Π΅Π΅ ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π³Π°. Π¨Π°Π³ 6 ΠΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΊΡΠΈΠΏΡΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. Π ΠΈΡ. 1. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ Π² Π½Π°ΡΠ°Π»Π΅ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ, ΠΠΠ‘Π’ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ Π±Π»ΠΎΡΠ½ΡΡ
ΡΠΈΡΡΠΎΠ², ΡΠΎ Π΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² Π½Π΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ
. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΌ Π±ΡΠ΄ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ «ΡΡΠ΅ΡΠ°» Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ
. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ ΠΠΠ‘Π’Π°, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π΅Ρ ΠΈΡ
ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΡΡΠ°. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΠ°Π³ΠΎΠ² ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ 32-Π±ΠΈΡΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ»ΡΡΠ°, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡΡ ΠΠΠ‘Π’Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ»ΡΡ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΡΡ
ΡΠΈΠΊΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π³ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ, ΡΡΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ»ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·, ΠΏΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ ΡΡΠΎΠΉΠΊΠΎΡΡΠΈ ΡΠΈΡΡΠ° ΡΡΠΎ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΡΠ΅ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠΏΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π° Π·Π΄ΡΠ°Π²ΡΠΉ ΡΠΌΡΡΠ», ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π²Π΅ΡΠ½ΡΠΌΠΈ. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΊΠ»Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π³Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·Π½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ»ΡΡΠ° ΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ»ΠΎΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π³Π° ΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΡΠΎΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΈΠΊΠ»ΠΎΠ². Π¦ΠΈΠΊΠ» Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ 32-Π: K 0,K 1,K 2,K 3,K 4,K 5,K 6,K 7,K 0,K 1,K 2,K 3,K 4,K 5,K 6,K 7,K 0,K 1,K 2,K 3,K 4,K 5,K 6,K 7,K 7,K 6,K 5,K 4,K 3,K 2,K 1,K 0. Π¦ΠΈΠΊΠ» ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ 32-Π : K 0,K 1,K 2,K 3,K 4,K 5,K 6,K 7,K 7,K 6,K 5,K 4,K 3,K 2,K 1,K 0,K 7,K 6,K 5,K 4,K 3,K 2,K 1,K 0,K 7,K 6,K 5,K 4,K 3,K 2,K 1,K 0. ΠΠ°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΊΠ»Π° 32-Π ΠΊ Π±Π»ΠΎΠΊΠ°ΠΌ ΠΎΡΠΊΡΡΡΡΡ
Π΄Π°Π½Π½ΡΡ
, ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ — ΡΠΈΠΊΠ»Π° 32-Π ΠΊ Π±Π»ΠΎΠΊΠ°ΠΌ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
. ΠΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ· ΡΠ΅ΠΆΠΈΠΌΠΎΠ², 64-Π±ΠΈΡΠΎΠ²ΡΠ΅ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π² Π½Π΅ΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°. Π‘Ρ
Π΅ΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ°Ρ
3Π° ΠΈ Π± ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΠ½ΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Ρ ΠΈ Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
. Π Π°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΡΠΊΡΡΡΡΡ
ΠΈΠ»ΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡΠΈΠΉΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΡΠ°ΡΠ΅Π½ 64 Π±ΠΈΡΠ°ΠΌ: | T ΠΎ|=| T Ρ|=64Β· n, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ
Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. Π Π΅ΠΆΠΈΠΌ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ: § Π’Π°ΠΊ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΡΠΈΡΡΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΠΈ ΠΎΡ ΠΈΡ
ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄Π°Π½Π½ΡΡ
, ΠΏΡΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π²ΡΡ
ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ
Π±Π»ΠΎΠΊΠΎΠ² ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΠΈΡΡΡΠ΅ΠΊΡΡΠ° ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ°Π½Π°Π»ΠΈΡΠΈΠΊΡ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
, Π΅ΡΠ»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π΅ΠΌΡ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ Π΄Π»Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ°. § ΠΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π° ΡΠΈΡΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ
Π½Π΅ ΠΊΡΠ°ΡΠ½Π° 8 Π±Π°ΠΉΡΠ°ΠΌ ΠΈΠ»ΠΈ 64 Π±ΠΈΡΠ°ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠ΅ΠΌ ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ
ΠΌΠ°ΡΡΠΈΠ²Π° Π΄ΠΎ ΠΏΠΎΠ»Π½ΡΡ
64 Π±ΠΈΡ. ΠΡΠ° Π·Π°Π΄Π°ΡΠ° Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠ°, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄. ΠΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° «Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ Π±Π»ΠΎΠΊ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ» ΠΈΠ»ΠΈ, Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅, «Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ Π±Π»ΠΎΠΊ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ Π½ΡΠ»Π΅Π²ΡΡ
ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ
Π±ΠΈΡΠΎΠ²» ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΡΡ
Π΄Π°ΡΡ Π² ΡΡΠΊΠΈ ΠΊΡΠΈΠΏΡΠΎΠ°Π½Π°Π»ΠΈΡΠΈΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΈ ΡΡΠΎΡ ΡΠ°ΠΊΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉΠΊΠΎΡΡΠΈ ΡΠΈΡΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π»ΠΈΠ½Π° ΡΠΈΡΡΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²ΡΠΈΡΡ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ, ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ 64 Π±ΠΈΡΠ°ΠΌ, ΡΡΠΎ ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ, Π²Π΅Π΄Ρ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΊΡΠ°ΡΠ½ΡΠΌ 64 Π±ΠΈΡΠ°ΠΌ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ
ΡΡ 64-Π±ΠΈΡΠΎΠ²ΡΡ
Π±Π»ΠΎΠΊΠΎΠ². ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π΄Π»Ρ Π»ΡΠ±ΡΡ
ΡΠ΅Π°Π»ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΡΠΎ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊ, Π½ΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 32 Π±Π°ΠΉΡΠ°, Π° ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½ — 64 Π±Π°ΠΉΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ
ΡΡ 8-Π±Π°ΠΉΡΠΎΠ²ΡΡ
Π±Π»ΠΎΠΊΠΎΠ² Π² ΠΊΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΠ΅ Π·Π°ΠΌΠ΅Π½ Π±ΡΠ΄Π΅Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΠΈΡ
Π²Π΅ΡΡΠΌΠ° ΠΏΠ»ΠΎΡ
ΠΎΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ
ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ Π±ΡΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ ΠΏΡΠΎΡΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ±Π½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π±ΡΡΡ Π½Π°Π»ΠΈΡΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
— ΡΠΈΠ½Ρ
ΡΠΎΠΏΠΎΡΡΠ»ΠΊΠΈ (ΡΠΌ. ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»). ΠΠ°ΡΠ° Π΄ΠΎΠ³Π°Π΄ΠΊΠ° Π²Π΅ΡΠ½Π°, ΠΠΠ‘Π’ ΠΏΡΠ΅Π΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
Π΄Π°Π½Π½ΡΡ
. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠ»Π°ΡΡ BytesChopper, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΠΈΠΉΡΡ Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ Π±Π°ΠΉΡΠΎΠ²ΡΡ
ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π½Π° Π±Π»ΠΎΠΊΠΈ ΠΏΠΎ 64 Π±ΠΈΡΠ°: public class BytesChopper { private byte[] _bytesToChop; private byte[][] _outerBytesContainer; public int BlocksCount { get; private set; } public BytesChopper (string innerString) { _bytesToChop = Encoding.Default.GetBytes (innerString); MakeChopping (); } public BytesChopper (byte[] bytes) { _bytesToChop = bytes; MakeChopping (); } public byte[] Get (int packageNumber) { return _outerBytesContainer[packageNumber]; } private void MakeChopping () { if (_bytesToChop.Length%8≠0) throw new ArgumentException («Wrong inner line length,%64≠0»); int partitions = Convert. ToInt32(Math.Ceiling ((double)_bytesToChop. Count () / 8)); _outerBytesContainer = new byte[partitions][]; for (int i = 0; i < partitions; i++) { _outerBytesContainer[i] = ChopBytes (i); } BlocksCount = partitions; } private byte[] ChopBytes (int numOfChunk) { byte[] buf = new byte[8]; byte length = (byte)Math.Min (8, _bytesToChop.Length — numOfChunk * 8); int i; for (i = 0; i < length; i++) { buf[i] = _bytesToChop[numOfChunk * 8 + i]; } return buf; } } ΠΠ»Π°ΡΡ BitWorker Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΠΈΡΠ°ΠΌΠΈ Π²Π½ΡΡΡΠΈ Π±Π°ΠΉΡΠΎΠ² ΠΈ ΡΠΈΠ½ΡΠΎΠ²: public static class BitWorker { /// ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΠΈΡ Π² num Π±Π°ΠΉΡΠ΅ val ///ΠΡ
ΠΎΠ΄Π½ΠΎΠΉ Π±Π°ΠΉΡ ///ΠΠΎΠΌΠ΅Ρ Π±ΠΈΡΠ°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ 0 ///true-Π±ΠΈΡ ΡΠ°Π²Π΅Π½ 1, falseΠ±ΠΈΡ ΡΠ°Π²Π΅Π½ 0 public static bool GetBit (byte val, int num) { if ((num > 7) || (num < 0))//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
{ throw new ArgumentException (); } return ((val >> num) & 1) > 0;//ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ } public static bool GetBit (uint val, int num) { if ((num > 31) || (num < 0))//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
{ throw new ArgumentException (); } return ((val >> num) & 1) > 0;//ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ } /// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΡΠ° Π² Π±Π°ΠΉΡΠ΅ ///ΠΡ
ΠΎΠ΄Π½ΠΎΠΉ Π±Π°ΠΉΡ ///ΠΠΎΠΌΠ΅Ρ Π±ΠΈΡΠ° ///ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΡΠ°: true-Π±ΠΈΡ ΡΠ°Π²Π΅Π½ 1, falseΠ±ΠΈΡ ΡΠ°Π²Π΅Π½ 0 ///ΠΠ°ΠΉΡ, Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΡΠ° public static byte SetBit (byte val, int num, bool bit) { if ((num > 7) || (num < 0))//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
{ throw new ArgumentException (); } byte tmpval = 1; tmpval = (byte)(tmpval << num);//ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ val = (byte)(val & (~tmpval));//ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ Π² 0 Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΡ if (bit)// Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² 1 (tmpval));//ΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΡ Π² 1 return val; } public static uint SetBit (uint val, int num, bool bit) { if ((num > 31) || (num < 0))//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
{ throw new ArgumentException (); } uint tmpval = 1; tmpval = (uint)(tmpval << num);//ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ val = (uint)(val & (~tmpval));//ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ Π² 0 Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΡ if (bit)// Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² 1 (tmpval));//ΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΉ Π±ΠΈΡ Π² 1 return val; } /// ΠΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±ΠΈΡΠΎΠ² Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ///ΠΡ
ΠΎΠ΄Π½ΠΎΠΉΠ±Π°ΠΉΡ ///ΠΠ°ΠΉΡ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ Π±ΠΈΡΠΎΠ² public static byte Reverse (byte val) { int i = 0; byte rez = 0; for (i = 0; i < 8; i++) { rez = (byte)(rez << 1); if (((val >> i) & 1) > 0) 1); } return rez; } public static uint Reverse (uint val) { int i = 0; uint rez = 0; for (i = 0; i < 32; i++) { rez = rez << 1; if (((val >> i) & 1) > 0) 1; } return rez; } } ΠΠ»Π°ΡΡ Key Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ°. public class Key { public readonly byte[] KeyBytes; public readonly string KeyString; // ReSharper disable once UnassignedReadonlyField public readonly uint[] KeyUints; public Key (string key) { if (key.Length≠64) throw new ArgumentException («Wrong key string length, key must have 64 letters, its 32 bytes, its 256 bits»); KeyString = key; KeyBytes = new byte[32]; KeyUints = new uint[8]; byte[] buf = MathBlock. FromHex (key); for (int i = 0; i < buf. Length; i++) { KeyBytes[i] = buf[i]; } FillKeyUints (); } // ReSharper disable once RedundantAssignment private void FillKeyUints () { KeyUints[0] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[31]), BitWorker. Reverse (KeyBytes[30]), BitWorker. Reverse (KeyBytes[29]), BitWorker. Reverse (KeyBytes[28])); KeyUints[1] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[27]), BitWorker. Reverse (KeyBytes[26]), BitWorker. Reverse (KeyBytes[25]), BitWorker. Reverse (KeyBytes[24])); KeyUints[2] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[23]), BitWorker. Reverse (KeyBytes[22]), BitWorker. Reverse (KeyBytes[21]), BitWorker. Reverse (KeyBytes[20])); KeyUints[3] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[19]), BitWorker. Reverse (KeyBytes[18]), BitWorker. Reverse (KeyBytes[17]), BitWorker. Reverse (KeyBytes[16])); KeyUints[4] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[15]), BitWorker. Reverse (KeyBytes[14]), BitWorker. Reverse (KeyBytes[13]), BitWorker. Reverse (KeyBytes[12])); KeyUints[5] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[11]), BitWorker. Reverse (KeyBytes[10]), BitWorker. Reverse (KeyBytes[9]), BitWorker. Reverse (KeyBytes[8])); KeyUints[6] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[7]), BitWorker. Reverse (KeyBytes[6]), BitWorker. Reverse (KeyBytes[5]), BitWorker. Reverse (KeyBytes[4])); KeyUints[7] = MathBlock. FourBytesToUint (BitWorker.Reverse (KeyBytes[3]), BitWorker. Reverse (KeyBytes[2]), BitWorker. Reverse (KeyBytes[1]), BitWorker. Reverse (KeyBytes[0])); } } ΠΠ»Π°ΡΡ MathBlock Π΄Π»Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: public static class MathBlock { public static uint FourBytesToUint (byte first, byte second, byte third, byte fourth) { return ShiftLeft (first, 24) + ShiftLeft (second, 16) + ShiftLeft (third, 8) + fourth; } public static byte[] UintToByteArray (uint innerUint) { return BitConverter. GetBytes (innerUint); } public static uint RotateLeft (uint value, int count) int bitsize = sizeof (uint) * 8; // ΠΡΡΠ΅Π·Π°Π΅ΠΌ ΡΡΠ°ΡΡΠΈΠ΅ n Π±ΠΈΡ uint hi = (uint)((value >> (bitsize — count)) & ((1 << count) — 1)); // Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° n Π±ΠΈΡ Π²Π»Π΅Π²ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠ»Π°Π΄ΡΠ°Ρ ΡΠ°ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡΡ // Π½ΡΠ»ΡΠΌΠΈ, Π° ΠΏΠΎΡΠΎΠΌΡ or’ΠΎΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΠ΄Π° Π²ΡΡΠ΅Π·Π°Π½Π½ΡΡ ΡΡΠ°ΡΡΡΡ ΡΠ°ΡΡΡ return (value << count) public static byte RotateLeft (byte value, int count) int bitsize = sizeof (byte) * 8; // ΠΡΡΠ΅Π·Π°Π΅ΠΌ ΡΡΠ°ΡΡΠΈΠ΅ n Π±ΠΈΡ byte hi = (byte)((value >> (bitsize — count)) & ((1 << count) — 1)); // Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° n Π±ΠΈΡ Π²Π»Π΅Π²ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠ»Π°Π΄ΡΠ°Ρ ΡΠ°ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡΡ // Π½ΡΠ»ΡΠΌΠΈ, Π° ΠΏΠΎΡΠΎΠΌΡ or’ΠΎΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΠ΄Π° Π²ΡΡΠ΅Π·Π°Π½Π½ΡΡ ΡΡΠ°ΡΡΡΡ ΡΠ°ΡΡΡ return (byte)((value << count) public static uint ShiftLeft (uint innerUint, int position) { return innerUint << position; } public static uint ShiftLeft (byte byteToShift, int position) { return (uint)(byteToShift) << position; } public static uint AddMod (uint firstUint, uint secondUint, int pow) { return Mod ((firstUint + secondUint), pow); } public static uint Xor (uint firstUint, uint secondUint) { return firstUint ^ secondUint; } public static uint Mod (uint innerUint, int pow) { return (uint)(innerUint% (long)Math.Pow (2, pow)); } public static string ToHex (byte[] input) { string hexOutput = «» ; foreach (byte letter in input) { int value = Convert. ToInt32(letter); hexOutput += string. Format («{0:X}», value); if (value == 0) hexOutput += string. Format («{0:X}», value); } return hexOutput. ToLower (); } public static byte[] FromHex (string input) { input = input. ToLower (); if (input.Length%2 ≠ 0) input = '0' + input; int length = input. Length / 2; byte[] answer = new byte[length]; string buf; for (int i = 0; i < length; i++) { buf = input. Substring (i * 2, 2); byte value = Convert. ToByte (buf, 16); answer[i] = value; } return answer; } } ΠΠ»Π°ΡΡ SBlock Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½: public class SBlock { //[Stroka, stolbec] public readonly static byte[,] Bytes = { {4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3}, {14,11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9}, {5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11}, {7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3}, {6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2}, {4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14}, {13,11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12}, {1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12} }; } ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ EncryptionTemplateMethod ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Encoder ΠΈ Decoder, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ-Π΄Π΅ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΏΠ°ΡΡΠ΅ΡΠ½ TemplateMethod Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° PrepareKeys (string key): internal abstract class EncryptionTemplateMethod { protected uint[] N; protected uint[] Keys; protected uint OperationsBuffer; public uint[] State { get { return N; } } protected EncryptionTemplateMethod (string key) { N = new uint[2]; Keys = new uint[32]; PrepareKeys (key); } //Template method will be implemented in Encoder and Decoder realisation protected abstract void PrepareKeys (string key); protected void PrepareRegisters (byte[] innerBytes) { if (innerBytes.Length ≠ 8) throw new ArgumentException («Partition must be 8 bytes long»); N[0] = MathBlock. FourBytesToUint (innerBytes[3], innerBytes[2], innerBytes[1], innerBytes[0]); N[1] = MathBlock. FourBytesToUint (innerBytes[7], innerBytes[6], innerBytes[5], innerBytes[4]); } public void Process (byte[] innerBytes) { PrepareRegisters (innerBytes); for (int i = 0; i < 32; i++) { Round (i); } } protected void Round (int number) AddKey (Keys[number]); SwapBlocks (); RotateBufferLeft (); XOROperation (); ExchangeRegisters (number); Debug.WriteLine (number+ «: «+N[0]+ « //step 1 protected void AddKey (uint key) { OperationsBuffer = MathBlock. AddMod (N[0], key, 32); } //step 2 protected void SwapBlocks () { byte[] block = SplitUintToFourBitsArray (OperationsBuffer); SwapBytes (block); OperationsBuffer = AgglutinateBytes (block); } protected byte[] SplitUintToFourBitsArray (uint innerUint) { int i, j; byte[] buffer = new byte[8]; for (i = 0; i < 8; i++) { for (j = 0; j < 4; j++) { BitWorker.SetBit (buffer[i], j, BitWorker. GetBit (innerUint, i * 4 + j)); } } return buffer; } protected byte[] SwapBytes (byte[] innerBytes) { int i; int length = innerBytes. Length; for (i = 0; i < length; i++) { innerBytes[i] = SBlock. Bytes[i, innerBytes[i]]; } return innerBytes; } protected uint AgglutinateBytes (byte[] innerBytes) { uint buf = 0; int i, j; bool bit; for (i = 0; i < 8; i++) { for (j = 0; j < 4; j++) { bit = BitWorker. GetBit (innerBytes[i], j); buf = BitWorker. SetBit (buf, j + i * 4, bit); } } return buf; } //step 3 protected void RotateBufferLeft () { OperationsBuffer = MathBlock. RotateLeft (OperationsBuffer, 11); } //step 4 protected void XOROperation () { OperationsBuffer = MathBlock. Xor (OperationsBuffer, N[1]); } //step 5 protected void ExchangeRegisters (int number) { if (number < 31) { N[1] = N[0]; N[0] = OperationsBuffer; } else { N[1] = OperationsBuffer; } } } internal class Encoder: EncryptionTemplateMethod { public Encoder (string key): base (key) { } protected override void PrepareKeys (string key) { Key k = new Key (key); Keys[0] = k. KeyUints[0]; Keys[1] = k. KeyUints[1]; Keys[2] = k. KeyUints[2]; Keys[3] = k. KeyUints[3]; Keys[4] = k. KeyUints[4]; Keys[5] = k. KeyUints[5]; Keys[6] = k. KeyUints[6]; Keys[7] = k. KeyUints[7]; Keys[8] = k. KeyUints[0]; Keys[9] = k. KeyUints[1]; Keys[10] = k. KeyUints[2]; Keys[11] = k. KeyUints[3]; Keys[12] = k. KeyUints[4]; Keys[13] = k. KeyUints[5]; Keys[14] = k. KeyUints[6]; Keys[15] = k. KeyUints[7]; Keys[16] = k. KeyUints[0]; Keys[17] = k. KeyUints[1]; Keys[18] = k. KeyUints[2]; Keys[19] = k. KeyUints[3]; Keys[20] = k. KeyUints[4]; Keys[21] = k. KeyUints[5]; Keys[22] = k. KeyUints[6]; Keys[23] = k. KeyUints[7]; Keys[24] = k. KeyUints[7]; Keys[25] = k. KeyUints[6]; Keys[26] = k. KeyUints[5]; Keys[27] = k. KeyUints[4]; Keys[28] = k. KeyUints[3]; Keys[29] = k. KeyUints[2]; Keys[30] = k. KeyUints[1]; Keys[31] = k. KeyUints[0]; } } internal class Decoder: EncryptionTemplateMethod { public Decoder (string key): base (key) { } protected override void PrepareKeys (string key) { Key k = new Key (key); Keys[0] = k. KeyUints[0]; Keys[1] = k. KeyUints[1]; Keys[2] = k. KeyUints[2]; Keys[3] = k. KeyUints[3]; Keys[4] = k. KeyUints[4]; Keys[5] = k. KeyUints[5]; Keys[6] = k. KeyUints[6]; Keys[7] = k. KeyUints[7]; Keys[8] = k. KeyUints[7]; Keys[9] = k. KeyUints[6]; Keys[10] = k. KeyUints[5]; Keys[11] = k. KeyUints[4]; Keys[12] = k. KeyUints[3]; Keys[13] = k. KeyUints[2]; Keys[14] = k. KeyUints[1]; Keys[15] = k. KeyUints[0]; Keys[16] = k. KeyUints[7]; Keys[17] = k. KeyUints[6]; Keys[18] = k. KeyUints[5]; Keys[19] = k. KeyUints[4]; Keys[20] = k. KeyUints[3]; Keys[21] = k. KeyUints[2]; Keys[22] = k. KeyUints[1]; Keys[23] = k. KeyUints[0]; Keys[24] = k. KeyUints[7]; Keys[25] = k. KeyUints[6]; Keys[26] = k. KeyUints[5]; Keys[27] = k. KeyUints[4]; Keys[28] = k. KeyUints[3]; Keys[29] = k. KeyUints[2]; Keys[30] = k. KeyUints[1]; Keys[31] = k. KeyUints[0]; } } Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ GostEncoder — ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄Π»Ρ Π½Π°ΡΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ½ΠΊΠΎΠ΄Π΅ΡΠ° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ°: public static class GostEncoder { private static byte[] resultBytes; public static byte[] Encode (string line, string key) { BytesChopper chopper = new BytesChopper (line); Encoder encoder = new Encoder (key); int i, count = chopper. BlocksCount; resultBytes = new byte[count * 8]; byte[] innerBytes; for (i = 0; i < count; i++) { innerBytes = chopper. Get (i); encoder.Process (innerBytes); byte[] encodedbytes = GetEncodedBytes (encoder); AddToResult (encodedbytes, i); } return resultBytes; } static void AddToResult (byte[] bytes, int chunkNumber) { int i, count = bytes. Length; for (i = 0; i < count; i++) { resultBytes[chunkNumber*8 + i] = bytes[i]; } } static byte[] GetEncodedBytes (EncryptionTemplateMethod encoderdecoder) { byte[] N0 = MathBlock. UintToByteArray (BitWorker.Reverse (encoderdecoder.State[0])); byte[] N1 = MathBlock. UintToByteArray (BitWorker.Reverse (encoderdecoder.State[1])); byte[] resultBytes = new byte[8]; int i; for (i = 0; i < 4; i++) { resultBytes[i] = N0[i]; resultBytes[4 + i] = N1[i]; } return resultBytes; } public static string Decode (byte[] encryptedBytes, string key) { BytesChopper chopper = new BytesChopper (encryptedBytes); Decoder decoder = new Decoder (key); int i, count = chopper. BlocksCount; resultBytes = new byte[count * 8]; byte[] innerBytes; for (i = 0; i < count; i++) { innerBytes = chopper. Get (i); decoder.Process (innerBytes); byte[] encodedBytes = GetEncodedBytes (decoder); AddToResult (encodedBytes, i); } return Encoding.Default.GetString (resultBytes); } } ΠΠ»Π°ΡΡ ΡΠ΅ΡΡΠΎΠ²: [TestClass] public class UnitTest1 { [TestMethod] public void BytesChopperTest () { byte[] buf = { 100, 100, 200, 200, 100, 100, 200, 200, 100, 100, 200, 200, 100, 100, 200, 200 }; BytesChopper chopper = new BytesChopper (buf); Assert.AreEqual (chopper.BlocksCount, Math. Ceiling ((double) buf. Count ()/8)); foreach (var b in chopper. Get (0)) { Debug.WriteLine (b); } foreach (var b in chopper. Get (1)) { Debug.WriteLine (b); } } [TestMethod] public void BytesChopperExceptionTest () { byte[] buf = { 100, 100, 200, 200, 100, 100, 200, 200, 100, 100, 200, 200, 100, 100, 200}; try { BytesChopper chopper = new BytesChopper (buf); } catch (Exception e) { Assert.AreEqual (e.GetType (), typeof (ArgumentException)); } } [TestMethod] public void FromHex () { string[] stringsBuffer = { «AAFF», «FFA», «0FFA», «FFA0» }; foreach (string line in stringsBuffer) { byte[] bytes = MathBlock. FromHex (line); for (int i = 0; i < bytes. Length; i++) { Debug.Write (bytes[i]+ ««); } Debug.Write («n»); } } [TestMethod] public void ToHex () { byte[] A = { 100, 100, 200, 200}; byte[] B = { 100, 200, 200 }; byte[] C = { 0, 100, 200, 200 }; Debug.WriteLine (MathBlock.ToHex (A)); Debug.WriteLine (MathBlock.ToHex (B)); Debug.WriteLine (MathBlock.ToHex (C)); } [TestMethod] public void Xor () { uint A = uint. MaxValue; uint B = uint. MaxValue; uint C = uint. MaxValue/2; Debug.WriteLine (A); Debug.WriteLine (MathBlock.Xor (A, B)); Debug.WriteLine (MathBlock.Xor (A, C)); Debug.WriteLine (MathBlock.Xor (B, C)); Assert.AreEqual ((uint)173, MathBlock. Xor (101, 200)); } [TestMethod] public void AddMod () { Assert.AreEqual (MathBlock.AddMod (120, 200, 5), (uint)0); Assert.AreEqual (MathBlock.AddMod (400, 240, 6), (uint)0); Assert.AreEqual (MathBlock.AddMod (400, 241, 6), (uint)1); } [TestMethod] public void ShiftLeft () { Assert.AreEqual (MathBlock.ShiftLeft ((byte)10, 2), (uint)40); Assert.AreEqual (MathBlock.ShiftLeft (uint.MaxValue / 2, 1), (uint.MaxValue/ 2) * 2); } [TestMethod] public void RotateLeft () { Assert.AreEqual (MathBlock.RotateLeft (MathBlock.ShiftLeft ((uint)1, 31), 1), (uint)1); Assert.AreEqual (MathBlock.RotateLeft (MathBlock.ShiftLeft ((uint)1, 31)+1, 1), (uint)3); Assert.AreEqual (MathBlock.RotateLeft ((byte)MathBlock.ShiftLeft ((byte)1, 7), 1), (byte)1); Assert.AreEqual (MathBlock.RotateLeft ((byte)129, 1), (byte)3); } [TestMethod] public void FourBytesToUint () { Assert.AreEqual (MathBlock.FourBytesToUint (1, 1, 1, 1), (uint)16843009); Assert.AreEqual (MathBlock.FourBytesToUint (3, 3, 3, 3), (uint)50529027); Assert.AreEqual (MathBlock.FourBytesToUint (170, 170, 170, 170), (uint)2863311530); } [TestMethod] public void FourBytesReverse () { uint buffer = BitWorker. Reverse (MathBlock.FourBytesToUint (170, 171, 172, 173)); uint mustBe = MathBlock. FourBytesToUint (BitWorker.Reverse (173), BitWorker. Reverse (172), BitWorker.Reverse (171), BitWorker. Reverse (170)); Assert.AreEqual (buffer, mustBe); } [TestMethod] public void UintToByteArray () { byte[] arrayBytes = {170, 170, 170, 170}; Assert.AreEqual (MathBlock.UintToByteArray (2 863 311 530)[0], arrayBytes[0]); Assert.AreEqual (MathBlock.UintToByteArray (2 863 311 530)[1], arrayBytes[1]); Assert.AreEqual (MathBlock.UintToByteArray (2 863 311 530)[2], arrayBytes[2]); Assert.AreEqual (MathBlock.UintToByteArray (2 863 311 530)[3], arrayBytes[3]); Assert.AreEqual (MathBlock.UintToByteArray (2 863 311 530).Length, arrayBytes. Length); byte[] arrayBytes1 = { 1, 1, 1, 1 }; Assert.AreEqual (MathBlock.UintToByteArray (16 843 009)[0], arrayBytes1[0]); Assert.AreEqual (MathBlock.UintToByteArray (16 843 009)[1], arrayBytes1[1]); Assert.AreEqual (MathBlock.UintToByteArray (16 843 009)[2], arrayBytes1[2]); Assert.AreEqual (MathBlock.UintToByteArray (16 843 009)[3], arrayBytes1[3]); Assert.AreEqual (MathBlock.UintToByteArray (16 843 009).Length, arrayBytes1. Length); } [TestMethod] public void GetBitSetBit () { Assert.AreEqual (BitWorker.GetBit (1, 0), BitWorker. GetBit ((uint) 1 000 000 001, 0)); Assert.AreEqual (BitWorker.SetBit (1, 1, true), 3); Assert.AreEqual (BitWorker.SetBit (1 000 000 001, 1, true), (uint) 1 000 000 003); } [TestMethod] public void Reverse () { Assert.AreEqual (BitWorker.Reverse (128), (byte)1); Assert.AreEqual (BitWorker.Reverse (2 147 483 648), (uint)1); } [TestMethod] public void KeyTest () { Key key0 = new Key («AABBAAFFAACCAADDAABBAADD AACCAAFFaabbaaffaaccaaddaabbaaddaaccaaff»); Key key1 = new Key («aabbaaffaaccaaddaabbaaddaaccaaff AABBAAFFAACCAADDAABBAA DDAACCAAFF»); for (int i = 0; i < 8; i++) { Assert.AreEqual (key0.KeyUints[i], key1. KeyUints[i]); Debug.WriteLine (key0.KeyUints[i]); } } [TestMethod] public void EncoderTest () { string testKey = «AABBAAFFAACCAADDAABBAADDAACCAAFF aabbaaffaaccaaddaabbaaddaaccaaff» ; string testData = «asdasdas» ; byte[] testBytes = GostEncoder. Encode (testData, testKey); foreach (var testByte in testBytes) { Debug.Write (testByte + ««); } Debug.Write («n»); string testString = GostEncoder. Decode (testBytes, testKey); Debug.Write (testString); Assert.AreEqual (testData, testString); } [TestMethod] public void EncoderTest2() { string testKey = «4 674 567 457 4747aff43353453454568F0012323534 5 474 846 645 645 645 709 312» ; string testData = «BLABLABL» ; byte[] testBytes = GostEncoder. Encode (testData, testKey); foreach (var testByte in testBytes) { Debug.Write (testByte + ««); } Debug.Write («n»); string testString = GostEncoder. Decode (testBytes, testKey); Debug.Write (testString); Assert.AreEqual (testData, testString); } [TestMethod] public void EncoderTest3() { string testKey = «4 674 567 457 4747aff43353453454568F0012323 5 345 474 846 645 645 761 052 672» ; string testData = «Hello World! xDxD» ; byte[] testBytes = GostEncoder. Encode (testData, testKey); foreach (var testByte in testBytes) { Debug.Write (testByte + ««); } Debug.Write («n»); string testString = GostEncoder. Decode (testBytes, testKey); Debug.Write (testString); Assert.AreEqual (testData, testString); } [TestMethod] public void EncoderShortTest () { string testKey = «AABBAAFFAACCAADDAABBAADDAACCAAFF aabbaaffaaccaaddaabbaaddaaccaaff» ; string testData = «asda» ; try { byte[] testBytes = GostEncoder. Encode (testData, testKey); } catch (Exception e) { Assert.AreEqual (e.GetType (), typeof (ArgumentException)); } } [TestMethod] public void EncoderBigTest () { string testKey = «AABBAAFFAACCAADDAABBAADDAACCAAFF aabbaaffaaccaaddaabbaaddaaccaaff» ; string testData = «asdasdasdasdasdasdasdasd» ; byte[] testBytes = GostEncoder. Encode (testData, testKey); foreach (var testByte in testBytes) { Debug.Write (testByte+" «); } string testString = GostEncoder. Decode (testBytes, testKey); Debug.Write («n»); Debug.WriteLine (testData+" n"); Debug.WriteLine (testString); Assert.AreEqual (testData, testString); } [TestMethod] public void EncoderBigNotFullTest () { string testKey = «AABBAAFFAACCAADDAABBAADDAACCAAFF aabbaaffaaccaaddaabbaaddaaccaaff» ; string testData = «asdasdasdasdasdasdasd» ; try { byte[] testBytes = GostEncoder. Encode (testData, testKey); } catch (Exception e) { Assert.AreEqual (e.GetType (), typeof (ArgumentException)); } } } Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ TDD Π½Π° C# ΠΏΠΎΠ΄ Visual Studio 2012. Π‘ΡΡΠΎΠΊΠ° «asdasdas»: Π‘ΡΡΠΎΠΊΠ° «Hello world! xDxD» ΠΠ½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ (Π½Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ):