すべての場合にパスワードを必要とする Web サービス (Java) があります。しかし、パスワードは安全に私に届く必要があります。すべてのプラットフォームに標準的な方法はありますか -> Java 暗号化/復号化。ランダムなプラットフォーム (php、.net、iPhone) で発生する可能性のある文字列を復号化するにはどうすればよいですか。
3 に答える
通常、パスワードは (MD5) などのアルゴリズムを使用して暗号化され、サービスと交換されます...パスワードを復号化する必要はありません...パスワードの MD5 ハッシュ文字列を作成するようなもので、キーは実際のパスワードそのものです。
したがって、サーバーでは、実際のパスワードの MD5 ハッシュを保存し、各クライアントは指定されたパスワードの MD5 ハッシュ文字列を作成し、最後にパスワード検証のために両方のハッシュ文字列を検証します...
MD5ハッシュを作成するためのJavaコードをオンラインで簡単に見つけることができます... 1つの例は
public static String convertStringToMD5Hash(String string) {
byte[] hash;
try {
hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("MD5 not supported?", e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8 not supported?", e);
}
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
int i = (b & 0xFF);
if (i < 0x10)
hex.append('0');
hex.append(Integer.toHexString(i));
}
return hex.toString();
}
免責事項: コードは私のマシンで動作し、本番環境で使用するには改善/最適化が必要な場合があります
@CodesInChaos がコメントで述べたように、SSL/TLS を使用してください。セキュリティを本当に称賛するなら、他の選択肢を考えないでください。この分野で創造的になりたいのであれば、リスクを負うことになります...
WS-Security Username Token を使用すると、クロス プラットフォームに確実に対応できます。
http://wso2.org/library/240 (ランパート)
また
Apache WSS4J を使用する
http://www.ibm.com/developerworks/webservices/library/ws-Axis2/index.html