Node.js создание криптографического ключа с использованием Java - PullRequest
3 голосов
/ 06 марта 2020

У меня есть этот код в node.js, он создает ключ с использованием Crypto. Могу ли я создать тот же ключ, используя Java?

diffieHellmanConfig': {
      'group': 'modp14',
      'encoding': 'base64'
    }


 const clientDHInstance = crypto.getDiffieHellman(config.userCardCrypto.diffieHellmanConfig.group);
 clientDHInstance.generateKeys();

 const clientPublicKey = clientDHInstance.getPublicKey(config.userCardCrypto.diffieHellmanConfig.encoding);

Я пытаюсь использовать

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(2048);
KeyPair keypair = keyGen.genKeyPair();
PrivateKey privateKey = keypair.getPrivate();
PublicKey publicKey = keypair.getPublic();
byte[] encoded = publicKey.getEncoded();
String s = Base64.getEncoder().encodeToString(encoded);
System.out.println(s);

Но ключ неправильный

Ключ узла - это t2EBMu8wCShfu8Dm45i9nNQ + TXyG5Oz1 / izjTwRD09U + NjLlOqjLstXnTbG5 / aa0WaCoP187J90piiebGOjZUlF / Bu / xkkrYncQHAJ403J8 + R2V5eHYCSQXbS6CSO7x + eEhNz8QTMgwkOR9w1R3gvbibaqL7qyQARPFak6 + VIKFLUakSzMvdAIjLNPu2dva1QdJixid + EYiZE / DxA7lqpje74I7wynZj7kmUZXtiIWu46suf5CaVONtjEVZilvErJNpVlPX5TXoMVNrWkl9g5Aa6moXg4K0M6Gc4taumnDr9gh4PEuw + / QVauEld27 / 5TQlfAlalvzg ==

1010 *Java ключ MIICKTCCARsGCSqGSIb3DQEDATCCAQwCggEBAP ////////// уо / aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu + pjsTmyJRSgh5jjQE3e + VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL / 1y29Aa37e44a / Тэйз + lrp8kEXxLH + ZJKGZR7ORbPcIAfLihY78FmNpINhxV05ppFj + о / STPX4NlXSPco62WHGLzViCFUrue1SkHcJaWbWcMNU5KvJgE8XRsCMoYIXwykF5GLjbOO + OedywYDoYDmyeDouwHoo + 1xV3wb0xSyd4ry / aVWBcYOZVJfOqVauUV0iYYmPoFEBVyjlqKrKpo ////////// 8CAQICAgQAA4IBBgACggEBAI + NYSvMh0bfh1ptt62vHEHENz6ZAYvnnrwmRhQRdYMBZiqu60AvJ4F6qL99EfesxvH3n8YaC + cG7bKAqkw74rRHJXkMF5xOy / к pTVvmQGAPjvTi5o4BJtHLOBgiwFKy7CYFKFksCJzkqNdAuPri / mfMm6GNG5MBYtQIurWkgOnnrVl3Nra2CSVUixQ5zCANOSnnNYNFPanr01bI6KZXsiRZRqfA4oYxBPySy4Sp1dx2IvSQe8EjNWTicTQQj / HP7hl1yf3uiYlM4h3dMbmfqv6Y10hW8kvoD88 / mh09pdz + HxxDz + mVSMe + 3 + N7VIYUEGRHhrAvjbXmwh5zyCMIJiI =

1 Ответ

2 голосов
/ 06 марта 2020

В вашем примере ключей ключи DH, созданные узлом, имеют ожидаемый размер 2048 бит, однако ключи Java DH выдвигаются в ~ 4k бит.

Так что я думаю что-то не так с тем, как вы инициализируете ключи DH для Java.

Глядя на ваш код, я не думаю, что целесообразно предоставлять целочисленный литерал для указания размера цикла DH c group.

Вместо этого попробуйте создать экземпляры ваших Java ключей DH следующим образом:

  final DHParameterSpec keySpec=new DHParameterSpec(DH_MODULUS,DH_BASE);
  final KeyPair keyPair;
  try {
    KeyPairGenerator keyGen=KeyPairGenerator.getInstance("DH");
    keyGen.initialize(keySpec);
    keyPair=keyGen.generateKeyPair();
    PrivateKey privateKey = keyPair.getPrivate();
    PublicKey publicKey = keyPair.getPublic();
    byte[] encoded = publicKey.getEncoded();
    String s = Base64.getEncoder().encodeToString(encoded);
    System.out.println(s);
  }

Вам необходимо создать DHParameterSpec объект в Java, обеспечивающий модуль и базу, аналогично значениям, указанным в узле.

Пример:

public DHParameterSpec modp14() {
  final BigInteger p =
      new BigInteger(
          "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
              + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
              + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
              + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
              + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
              + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
              + "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
              + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
              + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
              + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
              + "15728E5A8AACAA68FFFFFFFFFFFFFFFF",
          16);
  final BigInteger g = new BigInteger("2");
  return new DHParameterSpec(p, g);
}

Пожалуйста, смотрите здесь для уточнения по группе простых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...