Untitled
unknown
plain_text
2 years ago
16 kB
3
Indexable
//railfence #include<stdio.h> #include<string.h> #include<stdlib.h> char *plainTextToCipherText(char plainText[],int n) { int i,j,counter,limit,index=0,len; char *cipherText; len=strlen(plainText); cipherText=(char*)malloc(sizeof(char)*(len+1)); for(i=0;i<n;i++) { counter=0; for(j=i;j<len;j+=limit) { cipherText[index++]=plainText[j]; if(i==0 || i==n-1) limit=2*n-2; else if(counter%2==0) limit=2*(n-i-1); else limit=2*i; if(limit<=0) break; counter++; } } cipherText[index]='\0'; return cipherText; } int main() { int n; char plainText[100]; printf("Enter the plain text : "); scanf("%s",plainText); printf("Enter the value of n (key) : "); scanf("%d",&n); printf("%s\n",plainTextToCipherText(plainText,n)); return 0; } /* #include<stdio.h> #include<string.h> void main() { int i,j,k,l; char a[20],c[20],d[20]; printf("\n\t\t RAIL FENCE TECHNIQUE"); printf("\n\nEnter the input string : "); gets(a); l=strlen(a); /*Ciphering*/ for(i=0,j=0;i<l;i++) { if(i%2==0) c[j++]=a[i]; } for(i=0;i<l;i++) { if(i%2==1) c[j++]=a[i]; } c[j]='\0'; printf("\nCipher text after applying rail fence :"); printf("\n%s",c); /*Deciphering*/ if(l%2==0) k=l/2; else k=(l/2)+1; for(i=0,j=0;i<k;i++) { d[j]=c[i]; j=j+2; } for(i=k,j=1;i<l;i++) { d[j]=c[i]; j=j+2; } d[l]='\0'; printf("\nText after decryption : "); printf("%s",d); } */ ------------------------------------------------------------------------------------------------------------------- //vignere #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> char* encrypt(char* message, char* key); char* decrypt(char* message, char* key); int main() { char message[1000], key[1000], *encrypted, *decrypted; int choice; printf("Enter message: "); fgets(message, 1000, stdin); printf("Enter key: "); fgets(key, 1000, stdin); // remove newline characters from input message[strcspn(message, "\n")] = '\0'; key[strcspn(key, "\n")] = '\0'; printf("Enter your choice:\n"); printf("1. Encrypt\n"); printf("2. Decrypt\n"); scanf("%d", &choice); switch (choice) { case 1: encrypted = encrypt(message, key); printf("Encrypted message: %s\n", encrypted); free(encrypted); break; case 2: decrypted = decrypt(message, key); printf("Decrypted message: %s\n", decrypted); free(decrypted); break; default: printf("Invalid choice!\n"); break; } return 0; } char* encrypt(char* message, char* key) { char* encrypted = (char*)malloc(strlen(message) + 1); int messageLength = strlen(message), keyLength = strlen(key), i, j; for (i = 0, j = 0; i < messageLength; ++i, ++j) { if (j == keyLength) j = 0; // add key value to message character encrypted[i] = ((toupper(message[i]) - 'A' + toupper(key[j]) - 'A') % 26) + 'A'; } encrypted[i] = '\0'; return encrypted; } char* decrypt(char* message, char* key) { char* decrypted = (char*)malloc(strlen(message) + 1); int messageLength = strlen(message), keyLength = strlen(key), i, j; for (i = 0, j = 0; i < messageLength; ++i, ++j) { if (j == keyLength) j = 0; // subtract key value from message character decrypted[i] = ((toupper(message[i]) - 'A' - (toupper(key[j]) - 'A') + 26) % 26) + 'A'; } decrypted[i] = '\0'; return decrypted; } ------------------------------------------------------------------------------------------------------------------------- //diffie #include<stdio.h> #include<conio.h> #include<math.h> // global parameter int p = 11, g = 2; int a, b; int main() { int x, y, ssk1, ssk2; printf("Alice Choice: "); scanf("%d", &x); printf("Bob Choice: "); scanf("%d", &y); // Alice a = (long int) pow(g, x) % p; // Bob b = (long int) pow(g, y) % p; // SSK for ALICE ssk1 = (long int) pow(b, x) % p; // SSK for BOB ssk2 = (long int) pow(a, y) % p; printf("SSK1 = %d and SSK2 = %d", ssk1, ssk2); getch(); return 0; } ------------------------------------------------------------------------------------------------------------- //RSA #include<stdio.h> #include<conio.h> #include<math.h> // 1. select p and q // 2. n = p*q // 3. phi = (p-1)*(q-1) // 4. choose public key e such that 1<e<phi, gcd(e, phi)=1 // 5. calculate privat key: e*d = 1 mod phi // 6. Encryption: c = m^e mod n -- m message, c cipher // 7. Decryption: m = c^d mod n long long int p = 7, q = 11; long long int gcd(long long int, long long int); //long int mypow(long int, long int); int main() { long long int n, phi, e, d; long long int m = 2, c; //2 n = p*q; // 77 //3 Euler toitent function phi = (p-1)*(q-1); // 60 //4. choose public key p: printf("Enter public component: "); scanf("%lld", &e); // 13 // range 1<e<phi, gcd(e,phi)==1 // printf("GCD = %ld", gcd(phi, e)); // printf("GCD = %ld\n", gcd(phi, e)); if(!(e>1 && e<phi && gcd(phi,e)==1)) { printf("Public component is not selected properly.\n"); goto p; } //printf("Okay!"); // 5 find private key e * d = 1 mod phi // Simple searching strategy // In real implementation use proper algorithm. d = 2; while(e*d % phi != 1) { // printf("checking = %ld\n", d); d++; } printf("\nPrivate Key = %ld\n", d); // 6. Encryption //printf("\nm^e = %lld\n", (long long int) pow(m, e)); c = (long long int) pow(m, e) % n; printf("\nCipher: %lld\n", c); // 7. Decryption //printf("\nc^d = %lld\n", (long int)pow(c,d)); m = (long long int) pow(c, d) % n; printf("\nPlain: %lld\n", m); getch(); return 0; } long long int gcd(long long int a, long long int b) { long long int q, r, tmp; /* use if required if (b>a) { tmp = a; a = b; b = tmp; } */ while (b!=0) { q = a/b; r = a%b; a = b; b = r; } return a; } /* long int mypow(long int a, long int b) { long int p=1, i; for(i=1;i<b;i++) { p *= a; } return p; } */ ------------------------------------------------------------------------------------------------------ //caesar #include<stdio.h> int main() { char message[100], ch; int i, key; printf("Enter a message to encrypt: "); gets(message); printf("Enter key: "); scanf("%d", &key); for(i = 0; message[i] != '\0'; ++i){ ch = message[i]; if(ch >= 'a' && ch <= 'z'){ ch = ch + key; if(ch > 'z'){ ch = ch - 'z' + 'a' - 1; } message[i] = ch; } else if(ch >= 'A' && ch <= 'Z'){ ch = ch + key; if(ch > 'Z'){ ch = ch - 'Z' + 'A' - 1; } message[i] = ch; } } printf("Encrypted message: %s\n", message); //decrypt for(i = 0; message[i] != '\0'; ++i){ ch = message[i]; if(ch >= 'a' && ch <= 'z'){ ch = ch - key; if(ch < 'a'){ ch = ch + 'z' - 'a' + 1; } message[i] = ch; } else if(ch >= 'A' && ch <= 'Z'){ ch = ch - key; if(ch < 'A'){ ch = ch + 'Z' - 'A' + 1; } message[i] = ch; } } printf("Decrypted message: %s", message); return 0; } --------------------------------------------------------------------------------------------------------------- //MONOALPHABATIC CIPHER #include<stdio.h> #include<conio.h> #include<string.h> void main() { char pt[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; char ct[26]={'Z','Y','X','W','V','U','T','S','R','Q','P','O','N','M','L','K','J','I','H','G','F','E','D','C','B','A'}; char p[20]={'\0'},c[20]={'\0'},r[20]={'\0'}; int i,j; printf("\n enter the plain text:"); gets(p); //converting plain text into cipher text (encryption) for(i=0;i<strlen(p);i++) { for(j=0;j<26;j++) { if(pt[j]==p[i]) { c[i]=ct[j]; } } } printf("\n cipher text is: %s",c); //converting cipher text into plain text (decryption) for(i=0;i<strlen(c);i++) { for(j=0;j<26;j++) { if(ct[j]==c[i]) { r[i]=pt[j]; } } } printf("\n \n plain text is: %s",r); getch(); } -------------------------------------------------------------------------------------------------------------- //euclidean #include<stdio.h> #include<conio.h> int main() { int a, b, q, r, t; clrscr(); printf("Enter number a: "); scanf("%d", &a); printf("Enter number b: "); scanf("%d", &b); // large case if (b>a) { t = a; a = b; b = t; } printf("q\ta\tb\tr\n"); do { q = a/b; r = a%b; printf("%d\t%d\t%d\t%d\n", q, a, b, r); a = b; b = r; if(b==0) { printf("%d\t%d\t%d\t%d\n", q, a, b, r); } }while(b!=0); printf("GCD = %d", a); getch(); return 0; } ---------------------------------------------------------------------------------------------------------- //extended euclidean #include<stdio.h> #include<conio.h> int main() { int a, b, q, r, temp, s1=1, s2=0, s, t1=0, t2=1, t, N; clrscr(); printf("Enter number a: "); scanf("%d", &a); printf("Enter number b: "); scanf("%d", &b); // large case if (b>a) { temp = a; a = b; b = temp; } N = a; printf("q\ta\tb\tr\ts1\ts2\ts\tt1\tt2\tt\n"); do { q = a/b; r = a%b; s = s1 - q*s2; t = t1 - q*t2; printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", q, a, b, r, s1, s2, s, t1, t2, t); a = b; b = r; s1 = s2; s2 = s; t1 = t2; t2 = t; if(b==0) { printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", q, a, b, r, s1, s2, s, t1, t2, t); } }while(b!=0); printf("GCD = %d\n", a); //multiplicative inverse (t1) t1>0 ? printf("Multiplicative inverse: %d", t1): printf("Multiplicative inverse: %d", t1+N); getch(); return 0; } ------------------------------------------------------------------------------------------------------------ //Relatively prime #include<stdio.h> #include<conio.h> int main() { int a, b, q, r, t; printf("Enter number a: "); scanf("%d", &a); printf("Enter number b: "); scanf("%d", &b); // large case if (b>a) { t = a; a = b; b = t; } printf("q\ta\tb\tr\n"); do { q = a/b; r = a%b; printf("%d\t%d\t%d\t%d\n", q, a, b, r); a = b; b = r; if(b==0) { printf("%d\t%d\t%d\t%d\n", q, a, b, r); } }while(b!=0); printf("GCD = %d\n", a); if(a==1) { printf("Given numbers are relatively prime."); } else { printf("Given numbers are not relatively prime."); } getch(); return 0; } ------------------------------------------------------------------------------------------------------------------ //primtive root #include<stdio.h> #include<conio.h> #include<math.h> int check_unique(int t[100], int n) { int i, j, flag = 1; for(i=0;i<n;i++) { for(j=i+1; j<n; j++) { if(t[i] == t[j]) { flag = 0; break; } } } return flag; } int main() { int m, n, i, t[100]; printf("Enter number: "); scanf("%d", &n); printf("Enter modulo: "); scanf("%d", &m); // logic for(i=1;i<m; i++) { t[i-1] = (long int) pow(n, i) % m; } // display value for(i=0;i<m-1;i++) { printf("%d\t", t[i]); } // check check_unique(t, m-1)==1 ? printf("\nYES"):printf("\nNO"); getch(); return 0; } --------------------------------------------------------------------------------------------------------- //elagamal #include <stdio.h> #include <stdlib.h> #include <math.h> int is_prime(int num) { int i; for (i = 2; i <= sqrt(num); i++) { if (num % i == 0) { return 0; } } return 1; } int generate_prime(int min, int max) { int num = min + rand() % (max - min); while (!is_prime(num)) { num++; } return num; } int power(int a, int b, int p) { int result = 1; while (b > 0) { if (b % 2 == 1) { result = (result * a) % p; } a = (a * a) % p; b /= 2; } return result; } int main() { int p, g, x, y, k, m, r, e, d; printf("Enter a prime number p: "); scanf("%d", &p); while (!is_prime(p)) { printf("p is not prime. Enter a prime number p: "); scanf("%d", &p); } printf("Enter a generator g: "); scanf("%d", &g); // while (g <= 1 || g >= p - 1 || power(g, (p - 1) / 2, p) != 1) { // printf("g is not a generator. Enter a generator g: "); // scanf("%d", &g); // } printf("Enter a private key x: "); scanf("%d", &x); printf("Enter a message m: "); scanf("%d", &m); y = power(g,x,p); k = generate_prime(2, p - 2); r = power(g, k, p); e = (m * power(y, k, p)) % p; d = (e * power(r, p - 1 - x, p)) % p; printf("Public key (p, g, y) = (%d, %d, %d)\n", p, g, y); printf("Private key x = %d\n", x); printf("Message m = %d\n", m); printf("Random integer k = %d\n", k); printf("Encrypted message (r, e) = (%d, %d)\n", r, e); printf("Decrypted message d = %d\n", d); return 0; } --------------------------------------------------------------------------------------------------------------- //miller rabin #include <stdio.h> #include <stdlib.h> #include <time.h> // function to compute (base^exponent) modulo modulo int modularExponentiation(int base, int exponent, int modulo) { int result = 1; while (exponent > 0) { if (exponent % 2 == 1) { result = (result * base) % modulo; } base = (base * base) % modulo; exponent /= 2; } return result; } // function to test if n is prime using Miller-Rabin test with k iterations int millerRabin(int n, int k) { if (n == 2 || n == 3) { return 1; } if (n == 1 || n % 2 == 0) { return 0; } // write n-1 as (2^r)*d where d is odd int r = 0, d = n - 1; while (d % 2 == 0) { ++r; d /= 2; } int i, j; for (i = 0; i < k; ++i) { int a = rand() % (n - 3) + 2; // pick a random number in [2, n-2] int x = modularExponentiation(a, d, n); if (x == 1 || x == n - 1) { continue; } for (j = 1; j < r; ++j) { x = (x * x) % n; if (x == n - 1) { break; } } if (j == r) { return 0; } } return 1; } int main() { int n, k; printf("Enter the number to be tested: "); scanf("%d", &n); printf("Enter the number of iterations: "); scanf("%d", &k); srand(time(NULL)); // seed the random number generator with the current time if (millerRabin(n, k)) { printf("%d is probably prime.\n", n); } else { printf("%d is composite.\n", n); } return 0; }
Editor is loading...