For general discussion about Conway's Game of Life.
sailor3947
Posts: 1 Joined: November 17th, 2016, 6:46 am
Quote
Login to like this post
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 (95.66 KiB) Viewed 122 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.
toroidalet
Posts: 1514 Joined: August 7th, 2016, 1:48 pm
Location: My computer
Contact:
Quote
Login to like this post
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!
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
Quote
Login to like this post
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.