code: private String[] parseData(String hashedPassword) throws IllegalArgumentException {
          // <algorithm>:<iterations>:<base64(salt)>:<base64(hash)>
          String[] items = hashedPassword.split(":");
          String error = null;
          if (items.length == 4) {
              if (SUPPORTED_ALGORITHMS.contains(items[0])) {
                  try {
                      Integer.parseInt(items[1]);
                      return items; // good.
                  } catch (Exception e) {
                      error = Tr.formatMessage(tc, "JAVAEESEC_CDI_INVALID_ITERATION", items[1]);
                      if (tc.isDebugEnabled()) {
                          Tr.debug(tc, "Invalid format: the iterations is not a number : " + items[1]);
                      }
                  }
              } else {
                  error = Tr.formatMessage(tc, "JAVAEESEC_CDI_INVALID_ALGORITHM", items[0]);
                  if (tc.isDebugEnabled()) {
                      Tr.debug(tc, "Invalid format: the hash algorithm is not supported : " + items[0]);
                  }
              }
          } else {
              error = Tr.formatMessage(tc, "JAVAEESEC_CDI_INVALID_ELEMENTS", items.length);
              if (tc.isDebugEnabled()) {
                  Tr.debug(tc, "Invalid format: the number of the elements is not 4 but " + items.length);
              }
          }
          String message = Tr.formatMessage(tc, "JAVAEESEC_CDI_ERROR_PASSWORDHASH_INVALID_DATA", error);
          Tr.error(tc, message);
          throw new IllegalArgumentException(message);
      }
docs: Parse the data by colon.
  Make sure that there are three colons, and algorithm is one of supported ones
  and the 2nd param can be converted to the integer.
  
  @param hashedPassword
  @return