コード例 #1
0
  protected String newResponse(
      String cnonce, HttpExchange exchange, Realm securityRealm, Map details) {
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");

      // calc A1 digest
      md.update(securityRealm.getPrincipal().getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(String.valueOf(details.get("realm")).getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(securityRealm.getCredentials().getBytes(StringUtil.__ISO_8859_1));
      byte[] ha1 = md.digest();
      // calc A2 digest
      md.reset();
      md.update(exchange.getMethod().getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(exchange.getURI().getBytes(StringUtil.__ISO_8859_1));
      byte[] ha2 = md.digest();

      md.update(TypeUtil.toString(ha1, 16).getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(String.valueOf(details.get("nonce")).getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(NC.getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(cnonce.getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(String.valueOf(details.get("qop")).getBytes(StringUtil.__ISO_8859_1));
      md.update((byte) ':');
      md.update(TypeUtil.toString(ha2, 16).getBytes(StringUtil.__ISO_8859_1));
      byte[] digest = md.digest();

      // check digest
      return encode(digest);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }