code: public static void signTableRequest(final StorageCredentials creds, final java.net.HttpURLConnection request,
              final long contentLength, OperationContext opContext) throws InvalidKeyException, StorageException {
          if (creds.getClass().equals(StorageCredentialsAccountAndKey.class)) {
              opContext = opContext == null ? new OperationContext() : opContext;
              request.setRequestProperty(Constants.HeaderConstants.DATE, Utility.getGMTTime());
  
              final Canonicalizer canonicalizer = CanonicalizerFactory.getTableCanonicalizer(request);
  
              final String stringToSign = canonicalizer.canonicalize(request, creds.getAccountName(), contentLength);
  
              final String computedBase64Signature = StorageCredentialsHelper.computeHmac256(creds, stringToSign);
              
              Logger.debug(opContext, LogConstants.SIGNING, stringToSign);
  
              request.setRequestProperty(Constants.HeaderConstants.AUTHORIZATION,
                      String.format("%s %s:%s", "SharedKey", creds.getAccountName(), computedBase64Signature));
          }
      }
docs: Signs a request using the specified operation context under the Shared Key authentication scheme.
  
  @param request
  An <code>HttpURLConnection</code> object that represents the request to sign.
  @param contentLength
  The length of the content written to the output stream. If unknown, specify -1.
  @param opContext
  An {@link OperationContext} object that represents the context for the current operation. This object
  is used to track requests to the storage service, and to provide additional runtime information about
  the operation.
  
  @throws InvalidKeyException
  If the given key is invalid.
  @throws StorageException
  If a storage service error occurred.