code: private static String generateSharedAccessSignatureStringToSign(
              final SharedAccessPolicy policy, final String resource, final IPRange ipRange,
              final SharedAccessProtocols protocols, final String accessPolicyIdentifier)
              throws InvalidKeyException, StorageException {
          
          Utility.assertNotNullOrEmpty("resource", resource);
  
          String permissions = null;
          Date startTime = null;
          Date expiryTime = null;
          
          if (policy != null) {
              permissions = policy.permissionsToString();
              startTime = policy.getSharedAccessStartTime();
              expiryTime = policy.getSharedAccessExpiryTime();
          }
          
          String stringToSign = String.format("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
                  permissions == null ? Constants.EMPTY_STRING : permissions,
                  Utility.getUTCTimeOrEmpty(startTime), Utility.getUTCTimeOrEmpty(expiryTime), resource,
                  accessPolicyIdentifier == null ? Constants.EMPTY_STRING : accessPolicyIdentifier,
                  ipRange == null ? Constants.EMPTY_STRING : ipRange.toString(),
                  protocols == null ? Constants.EMPTY_STRING : protocols.toString(),
                  Constants.HeaderConstants.TARGET_STORAGE_VERSION);
  
          return stringToSign;
      }
docs: Get the signature hash embedded inside the Shared Access Signature.
  
  @param policy
  A {@link SharedAccessPolicy} containing the permissions for the SAS.
  @param resource
  The canonical resource (or resource type) string, unescaped.
  @param ipRange
  The range of IP addresses to hash.
  @param protocols
  The Internet protocols to hash.
  @param headers
  The optional header values to set for a blob or file accessed with this shared access signature.
  @param accessPolicyIdentifier
  An optional identifier for the policy.
  
  @return The signature hash embedded inside the Shared Access Signature.
  
  @throws InvalidKeyException
  @throws StorageException