サーブレットに関する以前のいくつかのエッセイは、サーブレットの単純な使用プロセスを整理しました。次の記事では、主にモバイルアプリアクセスインターフェイス、MD5暗号化伝送----> SMS検証--->モバイルプッシュ--->共有 - > Baiduクラウドマップ--->支払い...サードパーティのビジネス...私は初心者であるため、学習中に学び、書きます。
今日の記事では、主にJavaServlet送信データの暗号化、クライアント要求パラメーターの組み合わせであり、中央とソリューションで遭遇したすべての問題が含まれます。
携帯電話アクセスインターフェイスが公開されているため、インターフェイスがどの言語で書かれていても、対応するセキュリティ対策を講じている必要があります。それ以外の場合、人々があなたのURLを知った後、クライアントの要求をインターセプトしてから、提出パラメーターを変更して、大きな損失を引き起こします。最も一般的に使用されるサーブレットライティングインターフェイスは、送信されたデータも暗号化する必要があります。 WebService .NET WCFおよびその他のテクノロジーで書かれている場合、証明書のマッチングも必要になります...
1。要求されたデータパラメーターの暗号化と実装のアイデア。
暗号化ここでは、MD5 32ビット暗号化を使用します。 32ビットは不可逆的な暗号化です。このように、たとえそれがハッカーによって傍受されたとしても、暗号化時に結合された文字列に暗号化されたMD5値を復号化する方法はありません。もちろん、これは絶対的ではありません。一部のコンピューターの専門家は、過去数年間でMD5の暗号化方法を解読したようですが、この技術は自由に公開されないかもしれないと思います。それ以外の場合、プログラマーに尋ねるだけで、MD5暗号化を使用していますか?答えは間違いなくもうありません。
1.まず、リクエストパラメーターの組み合わせについて話させてください。これにはMD5暗号化が含まれるため、ユーザーがアプリを使用してアカウントにログインした後、ユーザーに2つのトークンにフィードバックする必要があります。最初のトークンは、ユーザーの身元を示す唯一の値です。このトークンはリクエストインターフェイスパラメーターに追加する必要があります(このパラメーターが暗号化に参加するかどうか、暗号化に参加するかどうかを判断するのはあなた次第です。ここに参加しました)。 2番目のトークンは、MD5の値を暗号化するために使用されます。このトークンはリクエストインターフェイスパラメーターに追加することはできません。ユーザーがインターフェイスを要求した後、サーブレットがパラメーターでユーザートークンを取得し、データベースのMD5暗号化に必要なトークンを照会する必要があるため、データベースに両方のトークンを保存する必要があります。次に、サーブレットは、クエリからユーザーが渡す文字列に暗号化されたトークンを追加し、MD5暗号化を再度実行します。暗号化後、ユーザーによって暗号化されたMD5の暗号化された値を比較します。サーブレットの暗号化された値と同じかどうか。それが異なる場合、2つの理由があるかもしれません。サーブレット側の暗号化文字列の組み合わせは正しくなく、ユーザーはデータの送信の途中で傍受および変更されています。私は両方のトークンを使用してJava UUIDを使用してそれらを生成しましたが、UUIDのために生成するものは一意の値です。生成方法は非常に簡単です。以下はコードです
public static string getUuid(){return uuid.randomuuid()。toString(); }以下は、Java MD5 32ビット暗号化方法です
public static string md5encrypt(string groupparamertstr)は、unsupportedencodingceptionをスローします{MesagedGest MessagedGigest = null; try {MessageDigest = MessageDigest.getInstance( "md5"); MESSAGEDGEST.RESET(); MESSAGEDGEST.UPDATE(groupparamertstr.getBytes( "utf-8")); } catch(nosuchalgorithmexception e){system.out.println( "nosuchalgorithmexception catch!"); System.Exit(-1); } catch(unsupportedencodingexception e){e.printstacktrace(); } byte [] bytearray = mesagedigest.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])); } md5strbuff.toString()を返します。 }以下は、暗号化の結果と、サーブレット上のパラメーターを取得した後、ユーザー要求によって渡された暗号化結果との比較です。同じことがリクエストが問題ないことを意味する場合、それ以外の場合はリクエストパラメーター値が変更された可能性があります
//次の3つのパラメーターはユーザートークンです。 2つ目は、暗号化に必要なパラメーターです。ユーザートークンを介して暗号化されたトークンを照会した後、サーブレット暗号化に必要なJSON文字列にスプライスする必要があります。 3つ目は、クライアントから送信された暗号化結果文字列です。ここで、メソッドは0を返し、ユーザーの暗号化の結果に問題がないことを示します。そうしないと、パブリックint posttokenverify(string token、jsonobject requestjsonobject、string encryptstrvalue){int returnvalue = 0; string [] mysqlparameter = new String [] {token}; //以下は、ユーザーの暗号化トークンをユーザートークンresultSet return -data = mysqlhepler.executequery( "select * from infosheet where idtoken =?"、mysqlparameter); jsonObject returnObject = null; try {returnObject = resultTojsontool.resultsettojsonobject(returnData); } catch(sqlexception e1){// todo auto-feenated catch block e1.printstacktrace(); } catch(jsonexception e1){// todo auto-fenated catch block e1.printstacktrace(); }文字列byencryptStrValue = ""; try {if(returnobject.getString( "encrypttoken")。length()> 2){//ユーザーのidtokenが存在することを示します、// returnvaluestring; // {"idtoken": "123456"、 "id": "34"、 "pwd": "23"、 "rypttoken": "2345678"、 "account": "hang": "hang"} /*次のコードは、javamd5暗号化文字列に一致しています。リクエスト中に渡されます。したがって、サーブレットを暗号化するときは、ユーザーのトークンを介してユーザーの暗号化されたトークを照会する必要があります。クエリが見つかった後、スプライスしてパラメーターJSONを要求する必要があります。そうすれば、サーブレットの暗号化された文字列がユーザーによって暗号化された文字列と一致するようにします。以下は、暗号化されたトークンをクエリして、暗号化されたトークンをクエリした後にリクエストパラメーターにスプライスする方法です。 */ byencryptStrValue = requestjsonobject.toString()。substring(0、requestjsonobject.toString()。length() - 1); jsonobject encryptokenjsonobject = new jsonobject(); encryptokenjsonobject.put( "encrypttoken"、returnobject.getString( "encrypttoken")); string value1 = encryptokenjsonobject.toString()。substring(1、encryptokenjsonobject.toString()。length()); byencryptStrValue = byencryptStrValue+"、"+value1; //} else {returnValue = 1; // idtoken error}} catch(jsonexception e1){// todo auto-fenated catch block e1.printstacktrace(); } try {//次の方法は、正しい文字列を使用してサーブレットのメソッド呼び出しを暗号化することです。結果を返した後、ユーザー文字列javamd5result = encryptsafa.md5encrypt(byencryptstrvalue)によって渡された暗号化結果を比較します。 if(javamd5result.equals(encryptStrvalue)){//暗号化文字列は正しい} } return returnValue; }最初のものは、サーブレットによって呼ばれるカプセル化されたメソッドです。以下は、サーブレットページで呼ばれるすべてのコードです。
1。要求されたURL
ここでは、JSON形式のパラメーターを変換するために辞書を渡しています。これはキー値ペア形式であり、要求には1つのパラメーターのみが使用されます。パラメーターのIdTokenはユーザートークンであり、私が追加する値はデータベースのランダム123456です。
もちろん、UUIDを使用しない場合、正式に行う場合は間違いなくそうではありません。
http:// localhost:8080/javaservlettest/2.jsp?parameter = {"parameter": "{/" idtoken/":/" 123456/"、/" pwd/":/"中国語文字/"、/" account/":/" hang/"}"、 "md5str": "672f4a8c6fb92103c01d4275e46df790"}
以下は、サーブレットページで処理されたコードです。プロセス全体は、配信中にユーザー要求が変更されたかどうかを確認することです。
//昨日ここで問題に遭遇しました。中国語でパラメーターを要求したとき、サーブレットを手に入れた後、サーブレットは文字化けされ、次の方法を使用しました。 string requestjsonstr = new String(request.getParameter( "parameter")。getBytes( "ISO8859-1")、 "utf-8"); //パラメーターを送信jsonObject objectParameter = null; // idtoken jsonobject requestparmeter = null; // idtoken string idtoken = ""; //クライアント暗号化文字列String md5str = ""; {//合計JSON文字列を取得してください。これは実際には、url.objectParameter = new jsonObject(requestjsonstr)からのみ渡すパラメーターObjectParameterです。 // JSONの重要な値であるパラメーターを送信し、パラメーター内のパラメーターを要求します。実際、このパラメーターには、RequestParmeter = new jsonObject(objectParameter.getString( "parameter"))など、ビジネスに必要なパラメーターが含まれています。 // idtokenこれはユーザートークンであり、ユーザーの一意の識別子です。 IDToken = requestParmeter.getString( "idtoken"); //クライアント暗号化文字列md5str = objectparameter.getString( "md5str"); } catch(jsonexception e1){// todo auto-fenated catch block e1.printstacktrace(); } // md5暗号化後に生成された文字列//次のステップは、トークンが正しいかどうかを確認することです。 if(tokenverifyResult == 0){out.println( "トークン暗号化方法は正しい"); } else {out.println( "暗号化されたトークンまたは暗号化メソッドエラー");戻る; }上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。