서블릿에 대한 이전 몇 가지 에세이는 서블릿의 간단한 사용 프로세스를 분류했습니다. 다음 기사는 주로 모바일 앱 액세스 인터페이스, MD5 암호화 전송 ---> SMS Verification ---> Mobile Push ---> 공유 ---> Baidu Cloud Map ----> 지불 ... 제 3 자 비즈니스 ... 학습 중에 배우고 글을 쓰기를 희망합니다.
오늘의 기사에는 주로 Javaservlet 전송 데이터의 암호화, 클라이언트 요청 매개 변수의 조합이 포함되며 중간에 발생한 모든 문제와 솔루션에서 발생합니다.
휴대폰 액세스 인터페이스가 게시되므로 인터페이스가 어떤 언어로 작성하든 해당 보안 조치를 취해야합니다. 그렇지 않으면 사람들이 URL을 알고 있으면 클라이언트의 요청을 가로 채고 제출 매개 변수를 수정하여 큰 손실이 발생합니다. 가장 일반적으로 사용되는 서블릿 쓰기 인터페이스는 전송 된 데이터도 암호화해야합니다. WebService .NET WCF 및 기타 기술로 작성된 경우 인증서 일치도 포함됩니다 ...
1. 요청 된 데이터 매개 변수의 암호화 및 구현에 대한 아이디어.
암호화 여기서 나는 MD5 32 비트 암호화를 사용합니다. 32 비트는 돌이킬 수없는 암호화입니다. 이런 식으로, 해커가 가로 채려면 암호화 할 때 결합 된 문자열로 암호화 한 MD5 값을 해독 할 수있는 방법이 없습니다. 물론 이것은 절대적인 것이 아닙니다. 일부 컴퓨터 전문가들은 지난 몇 년 동안 MD5의 암호화 방법을 해독 한 것으로 보이지만, 기술은 마음대로 공개되지 않을 수 있으며, 발표 되더라도 평범한 사람들이 이해할 수있는 것은 아닙니다. 그렇지 않으면 프로그래머에게 물어 보면 여전히 MD5 암호화를 사용하고 있습니까? 대답은 더 이상 없습니다.
1. 우선, 내 요청 매개 변수의 조합에 대해 이야기하겠습니다. 여기에는 MD5 암호화가 포함되므로 사용자가 앱을 사용하여 계정에 로그인 한 후 사용자 두 토큰을 피드백해야합니다. 첫 번째 토큰은 사용자의 신원을 나타내는 유일한 값입니다. 이 토큰은 요청 인터페이스 매개 변수 (이 매개 변수가 암호화에 참여하는지 여부에 관계없이 암호화에 참여하는지 여부를 결정하는 것이 귀하에게 달려 있어야합니다. 여기에 참여했습니다). 서플릿은 사용자의 암호화를 쿼리하는 데 필요한 사용자의 암호화를 쿼리해야하기 때문입니다. 두 번째 토큰은 MD5의 값을 암호화하는 데 사용됩니다. 이 토큰은 요청 인터페이스 매개 변수에 추가 할 수 없으며 데이터베이스에 두 토큰을 모두 저장해야합니다. 사용자가 인터페이스를 요청한 후 서플릿은 매개 변수에서 사용자 토큰을 얻은 다음 데이터베이스에서 MD5 암호화에 필요한 토큰을 쿼리해야하기 때문입니다. 그런 다음 서블릿은 쿼리에서 암호화 된 토큰을 사용자가 통과 한 문자열에 추가하고 MD5 암호화를 다시 수행합니다. 암호화 후 사용자가 암호화 한 MD5의 암호화 된 값을 비교하십시오. 서블릿의 암호화 된 값과 동일한 지 여부. 다른 경우 두 가지 이유가있을 수 있습니다. 서블릿 쪽의 암호화 문자열 조합이 잘못되었으며 사용자는 데이터 전송 중에 가로 채고 수정되었습니다. 나는 두 토큰을 사용하여 Java UUID를 사용하여 생성했으며 UUID를 위해 생성해야 할 것은 고유 한 가치입니다. 생성 방법은 매우 간단합니다. 아래는 코드입니다
public static string getUuid () {return uuid.randomuuid (). toString (); }다음은 Java MD5 32 비트 암호화 방법입니다
public static string md5encrypt (String GroupParamerTstr)는 unsupportedencodingexception {messageDigest MessageDigest = null; {messageDigest = messageDigest.getInstance ( "md5"); MessageDigest.reset (); MessageDigest.update (GroupParamertstr.getBytes ( "UTF-8")); } catch (nosuchalgorithmexception e) {system.out.println ( "Nosuchalgorithmexception!"); System.exit (-1); } catch (UnsupportedEncodingException e) {e.printstacktrace (); } byte [] bytearRay = messageDigest.Digest (); StringBuffer md5strbuff = new StringBuffer (); for (int i = 0; i <bytearray.length; i ++) {if (integer.tohexstring (0xff & bytearray [i]). length () == 1) md5strbuff.append ( "0"). else md5strbuff.append (integer.tohexstring (0xff & bytearray [i])); } return md5strbuff.toString (); } 다음은 서블릿에서 매개 변수를 얻은 후 사용자 요청에 의해 전달 된 암호화 결과와 암호화 결과를 비교 한 것입니다. 동일한 경우 요청이 정상임을 의미하는 경우, 그렇지 않으면 요청 매개 변수 값이 수정되었을 수 있습니다.
// 다음 세 매개 변수는 사용자 토큰입니다. 두 번째는 암호화에 필요한 매개 변수입니다. 사용자 토큰을 통해 암호화 된 토큰을 쿼리 한 후에는 서블릿 암호화에 필요한 JSON 문자열로 연결해야합니다. 세 번째는 클라이언트에서 보낸 암호화 결과 문자열입니다. 여기서, 메소드는 0을 반환하여 사용자의 암호화 결과에 문제가 없음을 나타냅니다. 그렇지 않으면 오류가 있습니다. 공개 정적 int posttokenverify (String token, jsonobject requestjsonobject, string encryptStrvalue) {int returnValue = 0; 문자열 [] mysqlparameter = new String [] {token}; // 다음은 사용자 토큰을 통해 사용자의 암호화 토큰을 쿼리하는 것입니다. ReturnData = mysqlhepler.executeQuery ( "Infisheet where idtoken =?", mysqlparameter); jsonobject returnObject = null; try {returnObject = resultToJSONTOOL.RESULTSETTOJSONOBJECT (returnData); } catch (sqlexception e1) {// todo 자동 생성 캐치 블록 e1.printstacktrace (); } catch (jsonexception e1) {// todo 자동 생성 캐치 블록 e1.printstacktrace (); } string byencryptStrValue = ""; try {if (returnObject.getString ( "EncryptToken"). length ()> 2) {// 사용자의 idtoken이 존재한다는 것을 나타냅니다. // return returnValuestring; // { "idtoken": "123456", "id": "34", "pwd": "23", "EncryptToken": "2345678", "Account": "Hang"} /*다음 코드는 javamd5 암호화 문자열과 일치합니다. 요청 중에 토큰을 전달할 수 없습니다. 따라서 서블릿을 암호화하면 사용자의 토큰을 통해 사용자의 암호화 된 Toke를 쿼리해야합니다. 쿼리를 찾은 후, 우리는 그것을 스플릿하고 매개 변수 JSON을 요청하여 서블릿의 암호화 된 문자열이 사용자가 암호화 한 문자열과 일치하도록해야합니다. 다음은 암호화 된 토큰을 쿼리하고 암호화 된 토큰을 쿼리 한 후 요청 매개 변수로 연결하는 메소드입니다. */ byencryptStrValue = requestJsonObject.toString (). substring (0, requestJsonObject.toString (). length () -1); jsonobject encrypttokenjsonobject = new jsonobject (); EncryptTokenjsonObject.put ( "EncryptToken", returnObject.getString ( "EncryptToken")); 문자열 value1 = EncryptTokenjsonObject.toString (). substring (1, encryptTokenjsonObject.toString (). length ()); byencryptStrValue = byencryptStrValue+","+value1; //} else {returnValue = 1; // idtoken error}} catch (jsonexception e1) {// todo 자동 생성 캐치 블록 e1.printstacktrace (); } try {// 다음 방법은 올바른 문자열을 사용하여 서블릿에서 메소드 호출을 암호화하는 것입니다. 결과를 반환 한 후 사용자 문자열 Javamd5result = EncrypTsafa.md5encrypt (byencryptStrValue)가 통과 한 암호화 결과를 비교하십시오. if (javamd5result.equals (encryptStrValue)) {// 암호화 문자열이 정확합니다} else {returnValue = 2; // 암호화 결과가 잘못되었습니다}} catch (unsupportedEncodingException e) {// auto-auto-generated catch block e .printstacktrace (); } return returnValue; }첫 번째는 서블릿이 호출하는 캡슐화 된 방법입니다. 아래는 서블릿 페이지에서 호출 된 모든 코드입니다.
1. 요청 된 URL
여기서는 Key-Value 쌍 양식 인 JSON 형식 매개 변수를 변환하기 위해 사전을 전달하고 있으며 요청에 하나의 매개 변수 만 사용됩니다. 매개 변수의 idtoken은 사용자 토큰이고 추가 값은 데이터베이스에서 임의의 123456입니다.
물론 UUID를 사용하지 않는다면 공식적으로 그렇게하는 경우에는 그렇지 않습니다.
http : // localhost : 8080/javaservlettest/2.jsp? parameter = { "parameter": "{/"idtoken/":/"123456/",/"pwd/":/"Chinese 문자/",/"ac
다음은 서블릿 페이지에서 처리 된 코드입니다. 전체 프로세스는 배송 중에 사용자 요청이 수정되었는지 확인하는 것입니다.
// 어제 여기서 문제가 발생했습니다. 중국어로 매개 변수를 요청했을 때 서블릿을받은 후 서블릿을 잡고 다음 방법을 사용했습니다. 문자열 requestjsonst = new String (request.getParameter ( "매개 변수"). getBytes ( "iso8859-1"), "UTF-8"); // 매개 변수 제출 jsonObject ObjectParameter = null; // idtoken jsonObject requestParmeter = null; // idtoken String idtoken = ""; // 클라이언트 암호화 문자열 문자열 md5str = ""; {// 총 JSON 문자열을 얻으십시오. 이것은 실제로 url.objectparameter = new jsonobject (requestjsonst)에서만 전달되는 매개 변수 ObjectParameter입니다. // json의 키 값인 매개 변수를 제출하고 매개 변수 내부의 매개 변수를 요청하십시오. 실제로이 매개 변수는 requestParmeter = new JsonObject (ObjectParameter.getString ( "매개 변수")과 같은 비즈니스에 필요한 매개 변수가 포함되어 있습니다. // idtoken 이것은 사용자의 고유 식별자 인 사용자 토큰입니다. idtoken = requestParmeter.getString ( "idtoken")을 쿼리하기 위해 데이터베이스에서 해당 암호화 된 토큰을 쿼리해야합니다. // 클라이언트 암호화 문자열 md5str = ObjectParameter.getString ( "md5str"); } catch (jsonexception e1) {// todo 자동 생성 캐치 블록 e1.printstacktrace (); } // MD5 암호화 후에 생성 된 문자열은 // 다음 단계는 토큰이 올바른지 확인하는 것입니다 int tokenverifyresult = EncrypTsafa.postTokenVerify (idtoken, requestParmeter, md5str); if (tokenverifyresult == 0) {out.println ( "토큰 암호화 메소드가 올바른"); } else {out.println ( "암호화 된 토큰 또는 암호화 메소드 오류"); 반품; }위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.