JustPaste
HomeCategoriesAboutDonateContactTerms of UsePrivacy Policy
JustPaste

Free online notepad — write and share instantly

Navigate

  • Home
  • Timeline
  • Categories

Info

  • About
  • Donate
  • Contact

Legal

  • Terms of Use
  • Privacy Policy

© 2026 JustPaste.app. All rights reserved.

Made with ♥ by JustPaste

Untitled Page | JustPaste.app
29 days ago0 views
👨‍💻Programming

S-DES

#include <stdio.h>
int P10[] = {3, 5, 2, 7, 4, 10, 1, 9, 8, 6};
int P8[] = {6, 3, 7, 4, 8, 5, 10, 9};
int IP[] = {2, 6, 3, 1, 4, 8, 5, 7};
int IPI[] = {4, 1, 3, 5, 7, 2, 8, 6};
int EP[] = {4, 1, 2, 3, 2, 3, 4, 1};
int P4[] = {2, 4, 3, 1};
int S0[4][4] = {{1, 0, 3, 2}, {3, 2, 1, 0}, {0, 2, 1, 3}, {3, 1, 3, 2}};
int S1[4][4] = {{0, 1, 2, 3}, {2, 0, 1, 3}, {3, 0, 1, 0}, {2, 1, 0, 3}};

void print_array(char* label, int arr[], int n) {
    printf("%s: ", label);
    for(int i = 0; i < n; i++) {
        printf("%d", arr[i]);
    }
    printf("\n");
}

int* permute(int input[], int table[], int n, int out[]) {
    for (int i = 0; i < n; i++) {
        out[i] = input[table[i] - 1];
    }
    return out;
}

int* left_shift(int key[], int n) {
    for (int shifts = 0; shifts < n; shifts++) {
        int count = 0;
        int ele = key[count];
        while (count < 4) {
            key[count] = key[count + 1];
            count++;
        }
        key[count++] = ele;  
        ele = key[count];
        while (count < 9) {
            key[count] = key[count + 1];
            count++;
        }
        key[count++] = ele;
    }
    return key;
}

int* xor_arrays(int a[], int b[], int n, int out[]) {
    for (int i = 0; i < n; i++) {
        out[i] = a[i] ^ b[i];
    }
    return out;
}

int sbox_lookup(int sbox[4][4], int bits[4]) {
    int row = (bits[0] << 1) | bits[3];
    int col = (bits[1] << 1) | bits[2];
    return sbox[row][col];
}

int* fK(int state[], int key[], int out[]) {
    int L[4], R[4], ep_out[8], xor_out[8], p4_out[4];
    
    for(int i = 0; i < 4; i++) {
        L[i] = state[i];
        R[i] = state[i+4];
    }

    permute(R, EP, 8, ep_out);
    xor_arrays(ep_out, key, 8, xor_out);

    int L_sbox_in[4] = {xor_out[0], xor_out[1], xor_out[2], xor_out[3]};
    int R_sbox_in[4] = {xor_out[4], xor_out[5], xor_out[6], xor_out[7]};

    int s0_val = sbox_lookup(S0, L_sbox_in);
    int s1_val = sbox_lookup(S1, R_sbox_in);

    int sbox_out[4] = { (s0_val >> 1) & 1, s0_val & 1, (s1_val >> 1) & 1, s1_val & 1 };

    permute(sbox_out, P4, 4, p4_out);

    int new_L[4];
    xor_arrays(L, p4_out, 4, new_L);

    for(int i = 0; i < 4; i++) {
        out[i] = new_L[i];
        out[i+4] = R[i];
    }
    
    return out;
}

int* switch_halves(int state[]) {
    for (int i = 0; i < 4; i++) {
        int temp = state[i];
        state[i] = state[i+4];
        state[i+4] = temp;
    }
    return state;
}

int main() {
    int key[10], p10_key[10], k1[8], k2[8];
    int plaintext[8], state[8], ciphertext[8];

    printf("Enter 10-bit Key: ");
    for (int i = 0; i < 10; i++) scanf("%d", &key[i]);

    printf("Enter 8-bit Plaintext: ");
    for (int i = 0; i < 8; i++) scanf("%d", &plaintext[i]);
    printf("\n");

    permute(key, P10, 10, p10_key);
    permute(left_shift(p10_key, 1), P8, 8, k1);
    print_array("Key 1 (K1)", k1, 8);

    permute(left_shift(p10_key, 2), P8, 8, k2);
    print_array("Key 2 (K2)", k2, 8);

    permute(plaintext, IP, 8, state);
    fK(state, k1, state);
    switch_halves(state);
    fK(state, k2, state);
    permute(state, IPI, 8, ciphertext);

    printf("\n");
    print_array("Ciphertext", ciphertext, 8);

    return 0;
}

RSA

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int x;
int calci(int p,int q)
{
    int r;
    while(p%q!=1)
    {
       r=p%q;
       if(r<=0)
          return -1;
          p=q;
          q=r;
      }
       return p;
 }
 int find_d(int a,int b)
 {
       int i=1;
       while((a*i)%b!=1)
      {
          i++;
      }
 return i;
 }
 
 int compute(int input,int range,int n)
 {
       int k=0,m=1;
       while(k!=range)
      {
         m=(m*(input%n))%n;
         k++;
      }
        return m;
 }
 
 int main(){
    int p,q,s,x,n,d,m,e,phi,result,choice,result1;
    {
        printf("1.Encrypt\n2.Decrypt\nEnter choice");
        scanf("%d",&choice);
       printf("Enter the first prime number\n");
       scanf("%d",&p);
       printf("Enter the second prime number\n");
       scanf("%d",&q);
       printf("Enter the value of:");
       scanf("%d",&e);
       printf("Enter the value of message:");
       scanf("%d",&m);
       n=p*q;
       phi=(p-1)*(q-1);
       e=calci(e,phi);
       if(e==-1)
       {
       printf("Not possible\n");
       return 0;
       }
       printf("\nEncryption\n");
       d=find_d(e,phi);
       result=compute(m,e,n);
       printf("Ciphertext=%d",result);
       printf("\nDecryption\n");
       result1=compute(result,d,n);
       printf("Message=%d\n:",result1);
       return 0;
      }
  }

Diffi Helman

User A

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
long long power(long long base, long long exp, long long mod)
{
    long long result = 1;
    base = base % mod;
    while(exp > 0)
    {
        if(exp % 2 == 1)
            result = (result * base) % mod;

        base = (base * base) % mod;
        exp = exp / 2;
    }
    return result;
}

int main()
{
    long long Xa, Ya, Ka, q, alpha, Yb;
    char prime[50], al[50], buffer[50];

    printf("Enter private key for User A (Xa): ");
    scanf("%lld", &Xa);

    FILE *file = fopen("master.txt","r");
    if(file == NULL)
    {
        printf("Error opening master.txt\n");
        return 1;
    }

    fgets(prime,sizeof(prime),file);
    fgets(al,sizeof(al),file);
    fclose(file);

    q = atoll(prime);
    alpha = atoll(al);

    printf("Prime number (q): %lld\n", q);
    printf("Primitive root (alpha): %lld\n", alpha);

    Ya = power(alpha, Xa, q);

    printf("Public key of User A (Ya): %lld\n", Ya);

    FILE *fa = fopen("userA.txt","w");
    fprintf(fa,"%lld",Ya);
    fclose(fa);

    printf("Waiting for User B's public key...\n");
    sleep(10);

    FILE *fb = fopen("userB.txt","r");
    if(fb == NULL)
    {
        printf("Error opening userB.txt\n");
        return 1;
    }

    fgets(buffer,sizeof(buffer),fb);
    fclose(fb);

    Yb = atoll(buffer);

    Ka = power(Yb, Xa, q);

    printf("Shared Secret Key (User A): %lld\n", Ka);

    return 0;
}

User B

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

long long power(long long base, long long exp, long long mod)
{
    long long result = 1;
    base = base % mod;

    while(exp > 0)
    {
        if(exp % 2 == 1)
            result = (result * base) % mod;

        base = (base * base) % mod;
        exp = exp / 2;
    }

    return result;
}

int main()
{
    long long Xb, Yb, Kb, q, alpha, Ya;
    char prime[50], al[50], buffer[50];

    printf("Enter private key for User B (Xb): ");
    scanf("%lld", &Xb);

    FILE *file = fopen("master.txt","r");
    if(file == NULL)
    {
        printf("Error opening master.txt\n");
        return 1;
    }

    fgets(prime,sizeof(prime),file);
    fgets(al,sizeof(al),file);
    fclose(file);

    q = atoll(prime);
    alpha = atoll(al);

    printf("Prime number (q): %lld\n", q);
    printf("Primitive root (alpha): %lld\n", alpha);

    Yb = power(alpha, Xb, q);

    printf("Public key of User B (Yb): %lld\n", Yb);

    FILE *fb = fopen("userB.txt","w");
    fprintf(fb,"%lld",Yb);
    fclose(fb);

    FILE *fa = fopen("userA.txt","r");
    if(fa == NULL)
    {
        printf("Error opening userA.txt\n");
        return 1;
    }

    fgets(buffer,sizeof(buffer),fa);
    fclose(fa);

    Ya = atoll(buffer);

    Kb = power(Ya, Xb, q);

    printf("Shared Secret Key (User B): %lld\n", Kb);

    return 0;
}

Elgamal

User A

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<unistd.h>
long long power(long long base, long long exp, long long mod)
{
    long long res = 1;
    base = base % mod;
    while(exp > 0)
    {
        if(exp % 2 == 1)
            res = (res * base) % mod;

        base = (base * base) % mod;
        exp = exp / 2;
    }
    return res;
}
long long inverse(long long K, long long q)
{
    for(long long i = 1; i < q; i++)
    {
        if((K * i) % q == 1)
            return i;
    }
    return -1;
}
int main()
{
    long long Xa, Ya, q, alpha;
    long long K, C1, C2, inverseK, M;
    char prime[20], al[20];
    char strYa[20], strC1[20], strC2[20];
    printf("Enter private key Xa: ");
    scanf("%lld", &Xa);
    FILE *file = fopen("master.txt","r");
    if(file == NULL)
    {
        printf("Error opening master.txt\n");
        return 1;
    }
    fgets(prime,sizeof(prime),file);
    fgets(al,sizeof(al),file);
    fclose(file);
    q = atoll(prime);
    alpha = atoll(al);
    printf("q = %lld\n",q);
    printf("alpha = %lld\n",alpha);
    Ya = power(alpha, Xa, q);
    printf("Ya = %lld\n",Ya);
    sprintf(strYa,"%lld\n",Ya);
    FILE *value = fopen("userA.txt","w");
    fputs(strYa,value);
    fputs(prime,value);
    fputs(al,value);
    fclose(value);
    printf("Waiting for userB...\n");
    sleep(10);
    FILE *userA = fopen("userB.txt","r");
    if(userA == NULL)
    {
        printf("userB.txt not found\n");
        return 1;
    }
    fgets(strC1,sizeof(strC1),userA);
    fgets(strC2,sizeof(strC2),userA);
    fclose(userA);
    C1 = atoll(strC1);
    C2 = atoll(strC2);
    K = power(C1, Xa, q);
    inverseK = inverse(K,q);
    M = (C2 * inverseK) % q;
    printf("Recovered Message = %lld\n",M);
    return 0;
}

User B

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
long long power(long long base, long long exp, long long mod)
{
    long long res = 1;
    base = base % mod;
    while(exp > 0)
    {
        if(exp % 2 == 1)
            res = (res * base) % mod;
        base = (base * base) % mod;
        exp = exp / 2;
    }
    return res;
}
int main()
{
    long long k, Ya, K, q, alpha, M;
    long long C1, C2;
    char Y[20], Q[20], al[20];
    char strC1[20], strC2[20];
    printf("Enter message M: ");
    scanf("%lld",&M);
    printf("Enter random k: ");
    scanf("%lld",&k);
    FILE *userA = fopen("userA.txt","r");
    if(userA == NULL)
    {
        printf("userA.txt not found\n");
        return 1;
    }
    fgets(Y,sizeof(Y),userA);
    fgets(Q,sizeof(Q),userA);
    fgets(al,sizeof(al),userA);
    fclose(userA);
    Ya = atoll(Y);
    q = atoll(Q);
    alpha = atoll(al);
    K = power(Ya,k,q);
    C1 = power(alpha,k,q);
    C2 = (K * M) % q;
    printf("C1 = %lld\n",C1);
    printf("C2 = %lld\n",C2);
    sprintf(strC1,"%lld\n",C1);
    sprintf(strC2,"%lld\n",C2);
    FILE *userB = fopen("userB.txt","w");
    fputs(strC1,userB);
    fputs(strC2,userB);
    fclose(userB);
    return 0;
}
← Back to timeline