Implementation of DiffieHellman Algorithm (original) (raw)

Implementation of Diffie-Hellman Algorithm

Last Updated : 3 Feb, 2026

**Diffie-Hellman algorithm:

The Diffie-Hellman algorithm is being used to establish a shared secret that can be used for secret communications while exchanging data over a public network using the elliptic curve to generate points and get the secret key using the parameters.

Step-by-Step explanation is as follows:

Alice Bob
Public Keys available = P, G Public Keys available = P, G
Private Key Selected = a Private Key Selected = b
Key generated = x = G^a mod P Key generated = y = G^b mod P
Exchange of generated keys takes place
Key received = y key received = x
Generated Secret Key = k_a = y^a mod P Generated Secret Key = k_b = x^b mod P
Algebraically, it can be shown that k_a = k_b
Users now have a symmetric secret key to encrypt

**Example:

Step 1: Alice and Bob get public numbers P = 23, G = 5
Step 2: Alice selected a private key a = 4 and
Bob selected a private key b = 3
Step 3: Alice and Bob compute public values
Alice: x =(5^4 mod 23) = (625 mod 23) = 4
Bob: y = (5^3 mod 23) = (125 mod 23) = 10
Step 4: Alice and Bob exchange public numbers
Step 5: Alice receives public key y =10 and
Bob receives public key x = 4
Step 6: Alice and Bob compute symmetric keys
Alice: ka = y^a mod p = 10000 mod 23 = 18
Bob: kb = x^b mod p = 64 mod 23 = 18
Step 7: 18 is the shared secret.

You can find more detail on what primitive roots of a number are in this article : Primitive root of a prime number n modulo n.

For our example the number 23(prime) has the following primitive roots : [5, 7, 10, 11, 14, 15, 17, 19, 20, 21].

C++ `

/* This program calculates the Key for two persons using the Diffie-Hellman Key exchange algorithm using C++ */ #include #include

using namespace std;

// Power function to return value of a ^ b mod P long long int power(long long int a, long long int b, long long int P) { if (b == 1) return a;

else
    return (((long long int)pow(a, b)) % P);

}

// Driver program int main() { long long int P, G, x, a, y, b, ka, kb;

// Both the persons will be agreed upon the
// public keys G and P
P = 23; // A prime number P is taken
cout << "The value of P : " << P << endl;

G = 5; // A primitive root for P, G is taken
cout << "The value of G : " << G << endl;

// Alice will choose the private key a
a = 4; // a is the chosen private key
cout << "The private key a for Alice : " << a << endl;

x = power(G, a, P); // gets the generated key

// Bob will choose the private key b
b = 3; // b is the chosen private key
cout << "The private key b for Bob : " << b << endl;

y = power(G, b, P); // gets the generated key

// Generating the secret key after the exchange
// of keys
ka = power(y, a, P); // Secret key for Alice
kb = power(x, b, P); // Secret key for Bob
cout << "Secret key for the Alice is : " << ka << endl;

cout << "Secret key for the Bob is : " << kb << endl;

return 0;

} // This code is contributed by Pranay Arora

C

/* This program calculates the Key for two persons using the Diffie-Hellman Key exchange algorithm */ #include <math.h> #include <stdio.h>

// Power function to return value of a ^ b mod P long long int power(long long int a, long long int b, long long int P) { if (b == 1) return a;

else
    return (((long long int)pow(a, b)) % P);

}

// Driver program int main() { long long int P, G, x, a, y, b, ka, kb;

// Both the persons will be agreed upon the
// public keys G and P
P = 23; // A prime number P is taken
printf("The value of P : %lld\n", P);

G = 5; // A primitive root for P, G is taken
printf("The value of G : %lld\n\n", G);

// Alice will choose the private key a
a = 4; // a is the chosen private key
printf("The private key a for Alice : %lld\n", a);
x = power(G, a, P); // gets the generated key

// Bob will choose the private key b
b = 3; // b is the chosen private key
printf("The private key b for Bob : %lld\n\n", b);
y = power(G, b, P); // gets the generated key

// Generating the secret key after the exchange
// of keys
ka = power(y, a, P); // Secret key for Alice
kb = power(x, b, P); // Secret key for Bob

printf("Secret key for the Alice is : %lld\n", ka);
printf("Secret Key for the Bob is : %lld\n", kb);

return 0;

}

Java

// This program calculates the Key for two persons // using the Diffie-Hellman Key exchange algorithm class GFG {

// Power function to return value of a ^ b mod P
private static long power(long a, long b, long p)
{
    if (b == 1)
        return a;
    else
        return (((long)Math.pow(a, b)) % p);
}

// Driver code
public static void main(String[] args)
{
    long P, G, x, a, y, b, ka, kb;

    // Both the persons will be agreed upon the
    // public keys G and P

    // A prime number P is taken
    P = 23;
    System.out.println("The value of P:" + P);

    // A primitive root for P, G is taken
    G = 5;
    System.out.println("The value of G:" + G);

    // Alice will choose the private key a
    // a is the chosen private key
    a = 4;
    System.out.println("The private key a for Alice:"
                       + a);

    // Gets the generated key
    x = power(G, a, P);

    // Bob will choose the private key b
    // b is the chosen private key
    b = 3;
    System.out.println("The private key b for Bob:"
                       + b);

    // Gets the generated key
    y = power(G, b, P);

    // Generating the secret key after the exchange
    // of keys
    ka = power(y, a, P); // Secret key for Alice
    kb = power(x, b, P); // Secret key for Bob

    System.out.println("Secret key for the Alice is:"
                       + ka);
    System.out.println("Secret key for the Bob is:"
                       + kb);
}

}

// This code is contributed by raghav14

Python

Diffie-Hellman Code

Power function to return value of a^b mod P

def power(a, b, p): if b == 1: return a else: return pow(a, b) % p

Main function

def main(): # Both persons agree upon the public keys G and P # A prime number P is taken P = 23 print("The value of P:", P)

# A primitive root for P, G is taken
G = 5
print("The value of G:", G)

# Alice chooses the private key a
# a is the chosen private key
a = 4
print("The private key a for Alice:", a)

# Gets the generated key
x = power(G, a, P)

# Bob chooses the private key b
# b is the chosen private key
b = 3
print("The private key b for Bob:", b)

# Gets the generated key
y = power(G, b, P)

# Generating the secret key after the exchange of keys
ka = power(y, a, P)  # Secret key for Alice
kb = power(x, b, P)  # Secret key for Bob

print("Secret key for Alice is:", ka)
print("Secret key for Bob is:", kb)

if name == "main": main()

C#

// C# implementation to calculate the Key for two persons // using the Diffie-Hellman Key exchange algorithm using System; class GFG {

// Power function to return value of a ^ b mod P
private static long power(long a, long b, long P)
{
    if (b == 1)
        return a;

    else
        return (((long)Math.Pow(a, b)) % P);
}
public static void Main()
{
    long P, G, x, a, y, b, ka, kb;
    // Both the persons will be agreed upon the
    // public keys G and P

    P = 23; // A prime number P is taken
    Console.WriteLine("The value of P:" + P);

    G = 5; // A primitive root for P, G is taken
    Console.WriteLine("The value of G:" + G);

    // Alice will choose the private key a
    a = 4; // a is the chosen private key
    Console.WriteLine("\nThe private key a for Alice:"
                      + a);
    x = power(G, a, P); // gets the generated key

    // Bob will choose the private key b
    b = 3; // b is the chosen private key
    Console.WriteLine("The private key b for Bob:" + b);
    y = power(G, b, P); // gets the generated key

    // Generating the secret key after the exchange
    // of keys
    ka = power(y, a, P); // Secret key for Alice
    kb = power(x, b, P); // Secret key for Bob

    Console.WriteLine("\nSecret key for the Alice is:"
                      + ka);
    Console.WriteLine("Secret key for the Alice is:"
                      + kb);
}

}

// This code is contributed by Pranay Arora

JavaScript

`

**Output:

Screenshot-2026-02-03-171959