Преобразование оператора подписи дайджеста openssl в код Java - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь преобразовать оператор OpenSSL linux в код Java, но пока я получаю разные результаты.Речь идет о следующем утверждении:

1002

это эхо в следующий результат:

6FFS + Вымь + Su887Mq0YG1OsURb7Csw9czvycShEd2P6SHQYKE7O6V / wzi5XTGJcP / sTaHvOAIZ5g8cIs5SEKD8NGaMLPD35hnNAn1nlAVfBT826pwIjUvzJII7d2aHKTjVfIhsyUEXbRtSMrrJNrtfyCTYYYOxCWzZv0RiOczQlpy1Jaa46fSacvaRKXi9xV / W1KxYcNS8wc / mc3Ujeqc4gfESb2YJU8yP3P269iENCjDq ++ 8CTyEj4vm4XxlXYBIREEK7qUfxTTo1 + XKfBck / 0/ RGwZD26jhRNHKMI6maW0mB + fRLjnYIvBqQKRbZnoIEmjy8AYy8CGC56Ujh2r3dg ==

Теперь я пытаюсь выполнить следующий код Java:

public String encryptString(byte[] data) {
    try {
        java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

        Resource keyStore = ctx.getResource(keystoreLocation);
        PrivateKey privateKey = loadPrivateKey(keyStore.getInputStream());

        Signature signature = Signature.getInstance("SHA256withRSA", "BC");
        signature.initSign(privateKey);
        signature.update(data);
        String result = Base64.getEncoder().encodeToString(signature.sign());

        // return Base64.getEncoder().encodeToString(signature.sign());
        return null;
    } catch (Exception e) {
        log.error("Something went wrong during encryption.");
        throw new RuntimeException(e);
    }
}

Этот код в конце отличается от lin:1013 * * * * 1014 1015 * uxdvp2oTaoS / Iln9KYNL + 2o49fbW2Br0jIt9cc / F3xRm3XnsEVVBzKA0vL9yMCAvNvH0nfBt2nRHQzL5PtN + uLy0pKCtHBKxfgdTZjnhm0qdj6tcOIvx3f1AkrMhXAk6bfEMqxu5dEl8AJ2wvYvggyBDXn + Bv0TG + 2iavNZ80RDqILExQvGSnD7O9BSPtOVtf17ahyzagYNiqEGxdqLUSZHNNs7Q10hYpeJ7cB6Jg / NRUGFS5Z14xmvjqyk63VFXw86hCvX1rnDt3vL7XRdSRKMhiI9SfnSHbNSNEMcSBRxX6nb1nkuuqjjzNBXZAduNAOBzIrrROmwQkXVOFKXDCw ==

I'vМы также попробовали некоторые другие вещи.Я пытался работать с реализацией Cipher:

Cipher cipher = Cipher.getInstance("RSA/None/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);

byte[] hash = digest.digest(data);
byte[] signature = cipher.doFinal(hash);

String hashEncoded = Base64.getEncoder().encodeToString(hash);
String signatureEncoded = Base64.getEncoder().encodeToString(hash);

Но все строки в итоге оказались короче, чем ожидалось.Я также видел выражение 'dgst', поэтому мне было интересно, что мне нужно переварить сообщение (используя MessageDigest digest = MessageDigest.getInstance("SHA-256", "BC");), но здесь у меня возникла та же проблема, намного короче String.

Кто-нибудь знает, что я здесь не так делаю?

1 Ответ

0 голосов
/ 07 февраля 2019

Проблема здесь очень простая и не особо интересная.echo "testString" добавляет новую строку к отображаемой строке.Для большинства версий echo опция -n подавит перевод строки.Или, также хорошо, вы можете добавить новую строку в версии Java, скажем, что-то вроде:

signature.update("testString\n".getBytes(StandardCharsets.UTF_8));
...