为什么我的 Java Base64 解码每次 运行 都会给我不同的结果?

Why does my Java Base64 decode give me different results each run?

实际上,这是我的代码(删除了不相关的内容):

public enum GoogleCertificateProvider {
    ...

    public byte[] signDigest(Digest digest) {
        AsymmetricSignResponse result = client.asymmetricSign(keyVersionName, digest);
        byte[] signature = result.getSignature().toByteArray();
        return Base64.getMimeDecoder().decode(signature);
    }

    ...
}

如上所示,我正在尝试使用 GCP 的 KMS 进行签名(AsymmetricSignResponse:https://googleapis.dev/java/google-cloud-kms/latest/com/google/cloud/kms/v1/AsymmetricSignResponse.html

结果介于 “最后一个单元没有足够的有效位” 和预期(正确)结果之一:

-----BEGIN CERTIFICATE REQUEST-----
MIIBzzCCAYgCAQAwXTESMBAGA1UEBxMJU2luZ2Fwb3JlMQswCQYDVQQGEwJTRzEJ
MAcGA1UECxMAMR8wHQYDVQQKExZTbGVlayBUZWNoIChQdGUuIEx0ZC4pMQ4wDAYD
VQQDEwVTbGVlazCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALfitXU5
/xmCAkzaX2fSHR69Bqey8ZmvWRB/2G1p9VszHOq2ag6QbsbHTISHSltEQ4ATz10s
NM/8IhfFQcNDwB/4S9h3+TebQGUB2xtqraRxzDs0miEj8uRBk9hdWkpawvBI2eUw
5YhaJYDcx7sPxCg/1lsnv7xXiH80kypUyr3i4umoN5oppGzepzZcrGTSNxlaCTzK
siNqAtEWxvB7dNAoPb1P5niXCZMLVmxgHl1buiLqAUE0dpc7Az5Vucais4qCuH9K
klPclBwv3ElX2bzDpmFTlwe0thKEGp4ChWKqHlz3c4yNHSofit+Y6vW1dJQiZa7v
C4+uX1nZG750s2UCAwEAATANBgkqhkiG9w0BAQsFAAMyAPOLtgaFZ5AKfTMxa10o
drTpqBGOyJvMpsdgwpGyj+PXsHviRayDTb6kK1ulmankEZs=
-----END CERTIFICATE REQUEST-----

为什么 Base64.decode 这样做?我怎么能弄清楚呢?我今天已经为此工作了大约 9 个小时,但我仍然毫无头绪。

我通过与 Whosebuger 的同事 sethvargo 交谈解决了这个问题。

他在我们讨论中的第一条评论是 Why are you base64-decoding the signature?

当我应该先尝试一些事情时,我先尝试了一些事情。它最终成为我的答案:我在没有用 base64 编码的东西上使用 base64.decode()。