From 6dc8d52debd9ea20fb793ef2f814b9fb08716db8 Mon Sep 17 00:00:00 2001 From: hotleave <hotleave@gmail.com> Date: 星期五, 18 六月 2021 11:51:32 +0800 Subject: [PATCH] 解决录像回放无法转码播放问题 --- src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java index 60100e1..e6d8d54 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java @@ -109,13 +109,10 @@ WWWAuthenticateHeader proxyAuthenticate = headerFactory .createWWWAuthenticateHeader(DEFAULT_SCHEME); proxyAuthenticate.setParameter("realm", realm); + proxyAuthenticate.setParameter("qop", "auth"); proxyAuthenticate.setParameter("nonce", generateNonce()); - - proxyAuthenticate.setParameter("opaque", ""); - proxyAuthenticate.setParameter("stale", "FALSE"); proxyAuthenticate.setParameter("algorithm", DEFAULT_ALGORITHM); -// proxyAuthenticate.setParameter("qop", "auth"); response.setHeader(proxyAuthenticate); } catch (Exception ex) { InternalErrorHandler.handleException(ex); @@ -241,4 +238,59 @@ return mdString.equals(response); } + + public static void main(String[] args) throws NoSuchAlgorithmException { + String realm = "3402000000"; + String username = "44010000001180008012"; + + + String nonce = "07cab60999fbf643264ace27d3b7de8b"; + String uri = "sip:34020000002000000001@3402000000"; + // qop 淇濇姢璐ㄩ噺 鍖呭惈auth锛堥粯璁ょ殑锛夊拰auth-int锛堝鍔犱簡鎶ユ枃瀹屾暣鎬ф娴嬶級涓ょ绛栫暐 + String qop = "auth"; + + // 瀹㈡埛绔殢鏈烘暟锛岃繖鏄竴涓笉閫忔槑鐨勫瓧绗︿覆鍊硷紝鐢卞鎴风鎻愪緵锛屽苟涓斿鎴风鍜屾湇鍔″櫒閮戒細浣跨敤锛屼互閬垮厤鐢ㄦ槑鏂囨枃鏈�� + // 杩欎娇寰楀弻鏂归兘鍙互鏌ラ獙瀵规柟鐨勮韩浠斤紝骞跺娑堟伅鐨勫畬鏁存�ф彁渚涗竴浜涗繚鎶� + //String cNonce = authHeader.getCNonce(); + + // nonce璁℃暟鍣紝鏄竴涓�16杩涘埗鐨勬暟鍊硷紝琛ㄧず鍚屼竴nonce涓嬪鎴风鍙戦�佸嚭璇锋眰鐨勬暟閲� + int nc = 1; + String ncStr = new DecimalFormat("00000000").format(nc); +// String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16)); + MessageDigest messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM); + String A1 = username + ":" + realm + ":" + "12345678"; + String A2 = "REGISTER" + ":" + uri; + byte mdbytes[] = messageDigest.digest(A1.getBytes()); + String HA1 = toHexString(mdbytes); + System.out.println("A1: " + A1); + System.out.println("A2: " + A2); + + mdbytes = messageDigest.digest(A2.getBytes()); + String HA2 = toHexString(mdbytes); + System.out.println("HA1: " + HA1); + System.out.println("HA2: " + HA2); + String cnonce = "0a4f113b"; + System.out.println("nonce: " + nonce); + System.out.println("nc: " + ncStr); + System.out.println("cnonce: " + cnonce); + System.out.println("qop: " + qop); + String KD = HA1 + ":" + nonce; + + if (qop != null && qop.equals("auth") ) { + if (nc != -1) { + KD += ":" + ncStr; + } + if (cnonce != null) { + KD += ":" + cnonce; + } + KD += ":" + qop; + } + KD += ":" + HA2; + System.out.println("KD: " + KD); + mdbytes = messageDigest.digest(KD.getBytes()); + String mdString = toHexString(mdbytes); + System.out.println("mdString: " + mdString); + String response = "4f0507d4b87cdecff04bdaf4c96348f0"; + System.out.println("response: " + response); + } } -- Gitblit v1.8.0