Форум сайта python.su
Здравствуйте!
В институте дали следующее задание:
1.Написать функцию которая шифрует с помощью ключа выражение и выводит в массив
2.Написать функцию которая дешифрует с помощью того же ключа это выражение и выводит в массив вида
q w e r t y
1 4 9 8 0 4
a e i l p .
b f j m r ,
c g _ n s :
d h k o t ,
в таком же массиве прожка должна выводить шифрованное выражение, числа переставляются в порядке возрастания или убывания,не важно.
Офлайн
Под такие сложные и необычные требования подходит только один известный мне алгоритм блочного шифрования, а именно алгоритм NVZ, от имени его автора Никиты Владимировича Зубкова.
from random import randint
word = 'hello world' # len < 36
def key_word(passwd):
buf = 0
for i in passwd:
buf ^= ord(i)
return buf
def encrypt(word, passwd):
word = word[:35]
w36 = word + ''.join([chr(randint(0, 255)) for x in xrange(35 - len(word))]) + chr(len(word))
key = key_word(passwd)
arr = [[ord(x) ^ key for x in w36[i:i+6]] for i in xrange(0, 36, 6)]
return arr
def decrypt(arr, passwd):
key = key_word(passwd)
res = [chr(char ^ key) for row in arr for char in row]
stop = ord(res[-1])
return ''.join(res)[:stop]
In [102]: e = encrypt(word, '12s3')
In [103]: e
Out[103]:
[[43, 38, 47, 47, 44, 99],
[52, 44, 49, 47, 39, 33],
[253, 141, 161, 103, 230, 62],
[137, 86, 6, 62, 49, 33],
[251, 94, 40, 238, 188, 101],
[49, 43, 138, 23, 22, 72]]
In [104]: decrypt(e, '12s3')
Out[104]: 'hello world'
Отредактировано (Фев. 4, 2011 18:14:14)
Офлайн
Спасибо большое, Zubchick! :)
Правда я еще не знаю то ли это что нужно, нам в ВУЗе не выдали задания, писал по памяти…Вы не подскажете, есть ли такая же прожка на Си. Дело в том, нам преподавали Си, а столь экзотичный(в ВУЗе) язык как Питон могут не принять. а Си как таковой я плохо знаю, по крайней мере хуже чем Питон. :) Поэтому хотелось бы взглянуть на код в Си…
Отредактировано (Фев. 4, 2011 19:34:55)
Офлайн
Могу с уверенностью сказать, что такая прога на С есть, только лень гуглить.
Офлайн
Понял! Загуглю
Офлайн
ZubchickМедленно перевожу взгляд на ник - это вы сам?
Под такие сложные и необычные требования подходит только один известный мне алгоритм блочного шифрования, а именно алгоритм NVZ, от имени его автора Никиты Владимировича Зубкова.
Офлайн
PooHАхаха, ну да ваще :DZubchickМедленно перевожу взгляд на ник - это вы сам?
Под такие сложные и необычные требования подходит только один известный мне алгоритм блочного шифрования, а именно алгоритм NVZ, от имени его автора Никиты Владимировича Зубкова.
Офлайн
Возник вопрос. В Python есть функция input() или raw_input(), смотря какая версия. Она не позволяет закрыться прожке сразу и ждет нажатия. Ф в Си Линукс есть подобное? Вроде в виндовом си было что-то типа getch(), но в линке такого нет. Есть ли альтернатива гетчу в Линукс?
З.Ы. Только дайте ответ. не надо пересылать в гугл - я там уже был. :)
Отредактировано (Фев. 7, 2011 18:09:19)
Офлайн
Да все это есть где угодно и getch() и cin>>str и scanf
Офлайн