Application Center - Maplesoft

# App Preview:

You can switch back to the summary page by clicking here.

by Marion Scheepers

> with(numtheory):

```Warning, the protected name order has been redefined and unprotected
```

First argument: A string of characters listed between ` and `.
Second argument: A "large" natural number.

>
local L, K, l, x, p, r, M, j, i, z;
L:= length(Modulus);
K:=convert(Message,bytes);
l:=nops(K);
x:=floor(L/4); ## This computes length of a packet.
if ( l mod x = 0) then
p:= l/x; ## This is the number of packets - Case 1.
r:= 0; ## This keeps track of the case.
else
p:= floor(l/x)+1; ## This is the number of packets - Case 2.
r:= 1;
fi:

if (r = 0) then
for j from 1 to p do
M:=0; ## This starts packet j's padded ascii
for i from 1 to x do
if (i < x) then
M:= (M + (1000 + K[(j-1)*x+i]))*10000;
else
M:= (M + (1000 + K[j*x]));
fi:
od:

printf("Packet number %d of the padded ASCII is %d\n",j,M);

od:

else
if ( p = 1) then
M:=0;
for i from 1 to l do
if (i < l) then
M:= (M + (1000 + K[i]))*10000;
else
M:= (M + (1000 + K[i]));
fi:
od:

printf("The padded ASCII version is %d \n",M);

else
for j from 1 to p do
M:=0;
if (j < p) then
for i from 1 to x do
if (i < x) then
M:= (M + (1000 + K[(j-1)*x+i]))*10000;
else
M:= (M + (1000 + K[j*x]));
fi:
od:

printf("Packet number %d of the padded ASCII is %d\n",j,M);

else
z := l mod x;
for i from 1 to z do
if (i < z) then
M:= (M + (1000 + K[(p-1)*x+i]))*10000;
else
M:= (M + (1000 + K[(p-1)*x+z]));
fi:
od:

printf("Packet number %d of the padded ASCII is %d\n",p,M);

fi:
od:
fi:
fi:
end:

Example.

> Modulus:=nextprime(11^53);
Message:=`Where have all the flowers gone?`;

`Packet number 1 of the padded ASCII is 10871104110111141101103211041097111811011032109711081108`

`Packet number 2 of the padded ASCII is 10321116110411011032110211081111111911011114111510321103`

`Packet number 3 of the padded ASCII is 1111111011011063`

>

Given a number, this checks to see if it is padded ASCII, and if so, converts it back to a list of ASCII values.

>
local l, M, j, N, X;
l:=length(Expression);
if (l mod 4 > 0) then
printf(" This is not a padded ASCII string.\n");
else
M:= Expression;
for j from 1 to (l/4) do
X[j]:=((M mod 10^(l-4*(j-1)) - (M mod 10^(l-4*j)))/(10^(l-4*j)))-1000;
if (j = 1) then
N:=[X[j]];
else
N:=[op(N),X[j]];
fi:
if( X[j] > 256 ) then
printf(" This is not a padded ASCII string.\n");
break;
fi:
od:
fi:
RETURN(N);
end:

Example

> X:=10321116110411011032110211081111111911011114111510321103;