code: protected String signAndBase64Encode(byte[] data, String key,
              SigningAlgorithm algorithm) throws SdkClientException {
          try {
              byte[] signature = sign(data, key.getBytes(UTF8), algorithm);
              return Base64.encodeAsString(signature);
          } catch (Exception e) {
              throw new SdkClientException(
                      "Unable to calculate a request signature: "
                              + e.getMessage(), e);
          }
      }
docs: Computes an RFC 2104-compliant HMAC signature for an array of bytes and
  returns the result as a Base64 encoded string.