мя ρσσуα
мя ρσσуα

Reputation: 1

Diffie-Hellman algorithm between java and Node.js

I'm trying to simulate java Diffie Hellman codes in Node.JS in java code I have 'key' and 'prime' but I'm don't know how to use this values in Node.js code

Java :

private static byte[] getSharedSecretKey() {
try {
        String key = "OoJcHg4+2ady0ULZJGFWK0giozYA9Je0Aacu1q9ElbU=";
        String prime = "qYsHeFZ0HlCU+Bnk3zmmtQr+ZkIkux8M/EQVSvzXFZs=";
        KeyPair generateKeyPair;
        DHParameterSpec dHParameterSpec = new DHParameterSpec(new BigInteger(1, Base64.decode(prime,2)), BigInteger.valueOf(2));
        KeyPairGenerator instance = KeyPairGenerator.getInstance("DiffieHellman");
        instance.initialize(dHParameterSpec);
        generateKeyPair = instance.generateKeyPair();
        KeyAgreement keyAgreement = KeyAgreement.getInstance("DiffieHellman");
        PrivateKey privateKey = generateKeyPair.getPrivate();

        keyAgreement.init(privateKey);

        String encodeToString3 = Base64.encodeToString(((DHPublicKey) generateKeyPair.getPublic()).getY().toByteArray(), 2);
        Log.i("pooya2",encodeToString3);
        

        PublicKey generatePublic = KeyFactory.getInstance("DiffieHellman").generatePublic(new DHPublicKeySpec(new BigInteger(1, Base64.decode(key,2)), new BigInteger(1, Base64.decode(prime,2)), BigInteger.valueOf(2)));
        keyAgreement.doPhase(generatePublic, true);
        byte[] bArr = keyAgreement.generateSecret();
        return bArr;
    }catch (Exception e)
    {
        return null;
    }
}

Node.js :

const crypto = require('crypto');

var p ="76686514709098868078547561269724999506546756740829312045036485484543791797659";
var key ="26464471107213172395531456221994106144264598183422226468709095454165464028597";
var g= 2;

let diffiehellmangrp1 = crypto.createDiffieHellman(Buffer.from(p,).toString("hex"),"hex",2);
let diffiehellmangrp2 = crypto.createDiffieHellman(Buffer.from(p,).toString("hex"),"hex",2);
// Generating keys
let alicePublicKey = diffiehellmangrp1.generateKeys();
let bobPublicKey = diffiehellmangrp2.generateKeys();
console.log("alicePublicKey", new Buffer(alicePublicKey).toString('base64'));
console.log("bobPublicKey", new Buffer(bobPublicKey).toString('base64'));

// Computing secret
const diffiehellmangrp1sc = diffiehellmangrp1 .computeSecret(Buffer.from(key,).toString("hex"), 'hex', 'base64');
console.log("aliceKey", diffiehellmangrp1sc);

const diffiehellmangrp2sc = diffiehellmangrp2 .computeSecret(Buffer.from(key,).toString("hex"), 'hex', 'base64');
console.log("bobKey", diffiehellmangrp2sc);

Are 'key' and 'prime' used correctly in their places? thats give me another result and not like java

Upvotes: 0

Views: 204

Answers (0)

Related Questions