转换OpenSSL的消化签署声明的Java代码

问题描述 投票:0回答:1

我想一个OpenSSL的Linux的语句转换为Java代码,但到目前为止,我已经得到不同的结果。这是关于下面的语句:

echo "testString" | openssl dgst -sha256 -sign private.key -passin "pass:passw0rd" | openssl base64 -A

这Echo的结果如下:

6FFS + VYM + 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);
    }
}

这个代码最终与编码的结果是从Linux语句的不同:

uxdvp2oTaoS / Iln9KYNL + 2o49fbW2Br0jIt9cc / F3xRm3XnsEVVBzKA0vL9yMCAvNvH0nfBt2nRHQzL5PtN + uLy0pKCtHBKxfgdTZjnhm0qdj6tcOIvx3f1AkrMhXAk6bfEMqxu5dEl8AJ2wvYvggyBDXn + Bv0TG + 2iavNZ80RDqILExQvGSnD7O9BSPtOVtf17ahyzagYNiqEGxdqLUSZHNNs7Q10hYpeJ7cB6Jg / NRUGFS5Z14xmvjqyk63VFXw86hCvX1rnDt3vL7XRdSRKMhiI9SfnSHbNSNEMcSBRxX6nb1nkuuqjjzNBXZAduNAOBzIrrROmwQkXVOFKXDCw ==

我也尝试了一些其他的事情。我试图与密码落实工作:

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");),但在这里我得到了同样的问题,这样短的字符串的。

有谁知道我在做什么错在这里?

java encryption openssl digital-signature digest
1个回答
0
投票

这里的问题是非常简单的,并没有什么特别有趣。 echo "testString"追加一个换行符的字符串进行呼应。对于回声的大多数版本中,-n选项将抑制换行符。或者,一样好,你可以在Java版本中添加新行,说的东西,如:

signature.update("testString\n".getBytes(StandardCharsets.UTF_8));
© www.soinside.com 2019 - 2024. All rights reserved.