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 39 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.