Cipher algorithm with Conway's Game of Life

For general discussion about Conway's Game of Life.
Post Reply
sailor3947
Posts: 1
Joined: November 17th, 2016, 6:46 am

Cipher algorithm with Conway's Game of Life

Post by sailor3947 » November 17th, 2016, 6:57 am

We made cipher algorithm with Conway's Game of Life.
Conway's Game of Life's patterns almost converge, so cipher text cannot be deciphered, because it is not bijection.
So we added every rounds almost not to be duplicated.

You can find algorithm flowchart here.
rsTDFxB.png
rsTDFxB.png (95.66 KiB) Viewed 38 times

Code: Select all

#include <stdio.h>
#define R 4 //array size
#define N 5  // repeat
/*key : CA convert, temp : temporary storage*/
int password[R][R];
int plaintext[R][R];
int key[N + 1][R + 2][R + 2], temp[R + 2][R + 2], k, i, j;

void lifegame(void);
void XOR(void);
void arr_print(int p);
void password_print(void);

int main(void)
{
input_plain();
printf("\n--------insert key-----------------\n");
lifegame();
for (k = 1; k <= N; k++) arr_print(k);
XOR();
for (k = 1; k <= N; k++) arr_print(k);
XOR_last();
password_print();
return 0;
}

int input_plain(void)
{
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++){
scanf("%d", &plaintext[i][j]);
}
}
}

void lifegame(void)
{
/*입력*/
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
scanf("%d", &key[0][i][j]);
temp[i][j] = 0;
}
}
/*put status quo to key[] in order*/
for (k = 0; k <= N; k++)
{
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
temp[i][j] = key[k][i - 1][j - 1] + key[k][i - 1][j] + key[k][i - 1][j + 1] + key[k][i][j - 1]
+ key[k][i][j + 1] + key[k][i + 1][j - 1] + key[k][i + 1][j] + key[k][i + 1][j + 1];
if (key[k][i][j] == 1)
key[k + 1][i][j] = temp[i][j] == 2 ? 1 : 0;
else
key[k + 1][i][j] = 0;
}
}
}
}

/*XOR*/
void XOR(void)
{
for (k = 0; k <= N; k++)
{
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
key[k + 1][i][j] = (key[k + 1][i][j] == key[k][i][j]) ? 0 : 1;
}
}
}
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
password[i - 1][j - 1] = key[N + 1][i][j];
}
}
}

int XOR_last(void){
for (i = 0; i <= N; i++){
for (j = 0; j <= N; j++){
if (password[i][j] != plaintext[i][j]){
password[i][j] = 1;
}
else{
password[i][j] = 0;
}
}
}
}

/*key array print*/
void arr_print(int p)
{
printf("---NUMBER %d---\n", p);
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
printf("%d ", key[p][i][j]);
}
printf("\n");
}
printf("----------------\n");
}

/*password print*/
void password_print(void)
{
printf("\n---password--- \n");
for (i = 0; i<R; i++)
{
for (j = 0; j<R; j++)
{
printf("%d ", password[i][j]);
}
printf("\n");
}
printf("-------------- \n");
}
Mod edit: placed [code] tags around code.

User avatar
toroidalet
Posts: 1514
Joined: August 7th, 2016, 1:48 pm
Location: My computer
Contact:

Re: Cipher algorithm with Conway's Game of Life

Post by toroidalet » November 19th, 2016, 6:50 pm

Suggestion: Put things like this in code boxes like this:

Code: Select all

#include <stdio.h>
#define R 4 //array size
#define N 5 // repeat
/*key : CA convert, temp : temporary storage*/
int password[R][R];
int plaintext[R][R];
int key[N + 1][R + 2][R + 2], temp[R + 2][R + 2], k, i, j;

void lifegame(void);
void XOR(void);
void arr_print(int p);
void password_print(void);

int main(void)
{
input_plain();
printf("\n--------insert key-----------------\n");
lifegame();
for (k = 1; k <= N; k++) arr_print(k);
XOR();
for (k = 1; k <= N; k++) arr_print(k);
XOR_last();
password_print();
return 0;
}

int input_plain(void)
{
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++){
scanf("%d", &plaintext[i][j]);
}
}
}

void lifegame(void)
{
/*입력*/
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
scanf("%d", &key[0][i][j]);
temp[i][j] = 0;
}
}
/*put status quo to key[] in order*/
for (k = 0; k <= N; k++)
{
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
temp[i][j] = key[k][i - 1][j - 1] + key[k][i - 1][j] + key[k][i - 1][j + 1] + key[k][i][j - 1]
+ key[k][i][j + 1] + key[k][i + 1][j - 1] + key[k][i + 1][j] + key[k][i + 1][j + 1];
if (key[k][i][j] == 1)
key[k + 1][i][j] = temp[i][j] == 2 ? 1 : 0;
else
key[k + 1][i][j] = 0;
}
}
}
}

/*XOR*/
void XOR(void)
{
for (k = 0; k <= N; k++)
{
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
key[k + 1][i][j] = (key[k + 1][i][j] == key[k][i][j]) ? 0 : 1;
}
}
}
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
password[i - 1][j - 1] = key[N + 1][i][j];
}
}
}

int XOR_last(void){
for (i = 0; i <= N; i++){
for (j = 0; j <= N; j++){
if (password[i][j] != plaintext[i][j]){
password[i][j] = 1;
}
else{
password[i][j] = 0;
}
}
}
}

/*key array print*/
void arr_print(int p)
{
printf("---NUMBER %d---\n", p);
for (i = 1; i <= R; i++)
{
for (j = 1; j <= R; j++)
{
printf("%d ", key[p][i][j]);
}
printf("\n");
}
printf("----------------\n");
}

/*password print*/
void password_print(void)
{
printf("\n---password--- \n");
for (i = 0; i<R; i++)
{
for (j = 0; j<R; j++)
{
printf("%d ", password[i][j]);
}
printf("\n");
}
printf("-------------- \n");
}
I really like the idea. Keep going! :mrgreen:
Also, it's python, right? When I run it using Golly, it doesn't work. Is there something I'm missing?
Any sufficiently advanced software is indistinguishable from malice.

shouldsee
Posts: 406
Joined: April 8th, 2016, 8:29 am

Re: Cipher algorithm with Conway's Game of Life

Post by shouldsee » November 19th, 2016, 8:10 pm

toroidalet wrote:Also, it's python, right? When I run it using Golly, it doesn't work. Is there something I'm missing?
It's C language in source code, you need studio or other c compiler to compile and then run it.

Post Reply