popkov
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Baset Хм... хоть становится ясно, что это алгоритм шифрования, причем простой. Однако твое описание неясное какое-то. Это не изложение алгоритма, а только какие-то фрагменты описания, составленного любителем. Поэтому "алгоритм" похож на головоломку... Добавлено: Ну да ладно, переведу то, что есть. Вот "S-блок", заполненный линейно цифрами от 0 до 255: Код: Вот произвольный ключ: Код: Теперь заполняем паролем другой массив из 256 символов: Код: key = "parol"; ch = ToCharacterCode[key] nn = Quotient[256, Length[ch]] + 1 KK=Take[Flatten@Table[ch, {nn}], 256] | KK - это и есть нужный массив. Теперь "Установим значение индекса j равным 0. Затем: Для i от 0 до 255 j = ( j + Si + Ki) mod 256 Поменяйте местами Si и Sj; " будет записываться так: Код: j=0; For[i = 1, i <= 256, i++, j = Mod[j + S[[i]] + KK[[i]], 256]; jj = j + 1; temp = S[[i]]; S[[i]] = S[[jj]]; S[[jj]] = temp;] | Что касается первого абзаца, его назначение я не понял. Кстати, а почему ты все это хочешь реализовать именно в Mathematica? Ведь инструкция написана для реализации на C. Вот рабочий код целиком: Код: S = Range[0, 255]; key = "parol"; ch = ToCharacterCode[key] nn = Quotient[256, Length[ch]] + 1; KK = Take[Flatten@Table[ch, {nn}], 256]; j = 0; For[i = 1, i <= 256, i++, j = Mod[j + S[[i]] + KK[[i]], 256]; jj = j + 1; temp = S[[i]]; S[[i]] = S[[jj]]; S[[jj]] = temp;]; S |
| Всего записей: 1851 | Зарегистр. 22-03-2003 | Отправлено: 12:10 28-05-2010 | Исправлено: popkov, 13:01 28-05-2010 |
|