Suppose
is a sequence of capital letters and spaces, and that
does not begin with a space. We encode
as a number in base
as follows: a single space corresponds to 0
, the letter
to
,
to
,
,
to
. Thus ``RUN NIKITA'' is a number
written in base
:
RUN NIKITA![]() |
![]() |
|
![]() |
||
![]() ![]() |
If
, then any sequence of
letters can be encoded as above
using a positive integer
. Thus if we can encrypt integers
of size at most
, then we must break our message up into blocks
of size at most
.
sage: def encode(s): ... s = str(s) # make input a string ... return sum(ord(s[i])*256^i for i in range(len(s))) sage: def decode(n): ... n = Integer(n) # make input an integer ... v = [] ... while n != 0: ... v.append(chr(n % 256)) ... n //= 256 # this replaces n by floor(n/256). ... return ''.join(v) sage: m = encode('Run Nikita!'); m 40354769014714649421968722 sage: decode(m) 'Run Nikita!'
William 2007-06-01