You are on page 1of 6

Implementation of Digital signature Standard (DSS)

Cryptography and Network Security

Name – Divyanshu
Reg no. – 21BCE5309

SERVER CODE

import java.net.*;

import java.io.*; import

java.security.*; import

java.util.Base64; import

java.util.Scanner;

public class Server5931 { public static void

main(String[] args) throws Exception { int port =

6868;

ServerSocket serverSocket = new ServerSocket(port);

System.out.println("Server started and listening on port " + port);

// Set up scanner for user input

Scanner scanner = new Scanner(System.in);

System.out.print("Enter the message you want to sign: ");


String message = scanner.nextLine();

// Generate RSA key pair

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");

keyGen.initialize(2048);

KeyPair pair = keyGen.generateKeyPair();

PrivateKey privateKey = pair.getPrivate();

// Sign the message

Signature sign = Signature.getInstance("SHA256withRSA");

sign.initSign(privateKey); sign.update(message.getBytes());

byte[] signature = sign.sign();

// Print the signature

System.out.println("Signature: " + Base64.getEncoder().encodeToString(signature));

// Wait for client connection

Socket socket = serverSocket.accept();

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

// Send the message and signature to the client

dos.writeUTF(message); dos.writeUTF(Base64.getEncoder().encodeToString(signature));

dos.writeUTF(Base64.getEncoder().encodeToString(pair.getPublic().getEncoded()));
scanner.close();

socket.close();

serverSocket.close();

CLIENT CODE import java.net.*; import

java.io.*; import java.security.*; import

java.security.spec.X509EncodedKeySpec; import

java.util.Base64;

public class Client5931 { public static void main(String[]

args) throws Exception {

String host = "localhost";

int port = 6868;

Socket socket = new Socket(host, port);

DataInputStream dis = new DataInputStream(socket.getInputStream());

// Receive the message, signature, and public key from the server

String message = dis.readUTF();

String signatureEncoded = dis.readUTF(); byte[] signature =

Base64.getDecoder().decode(signatureEncoded); String

publicKeyEncoded = dis.readUTF(); byte[] publicBytes =

Base64.getDecoder().decode(publicKeyEncoded);
// Convert the encoded public key to a PublicKey object

X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PublicKey publicKey = keyFactory.generatePublic(keySpec);

// Verify the signature

Signature sign = Signature.getInstance("SHA256withRSA");

sign.initVerify(publicKey);

sign.update(message.getBytes()); boolean isVerified =

sign.verify(signature);

// Print the results

System.out.println("Server's signature: " + signatureEncoded);

System.out.println("Original message: " + message);

System.out.println("Signature verified: " + isVerified); socket.close();

OUTPUT

You might also like