我有一个 Web 服务 (Java),它在所有情况下都需要密码。但是密码必须安全地交给我。是否有适用于所有平台的标准方法-> java 加密/解密。如何解密可能来自随机平台(php、.net、iPhone)的字符串。
问问题
1116 次
3 回答
0
通常密码使用某种算法加密(MD5)并与服务交换......您不必解密密码......就像您创建密码的MD5哈希字符串,密钥是它自己的实际密码。
因此,在服务器上,您将存储实际密码的 MD5 哈希,每个客户端将创建给定密码的 MD5 哈希字符串,最后您将验证两个哈希字符串以进行密码验证...
你可以很容易地在网上找到 java 代码来创建 MD5 哈希......一个例子是
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();
}
免责声明:代码在我的机器上工作,可能需要改进/优化以供生产使用
于 2012-11-05T14:27:50.940 回答
0
使用 WS-Security 用户名令牌,确保它可以跨平台处理。
http://wso2.org/library/240(城墙)
或者
使用 Apache WSS4J
http://www.ibm.com/developerworks/webservices/library/ws-Axis2/index.html
于 2012-11-05T15:53:23.837 回答
0
就像@CodesInChaos 在他的评论中所说,使用 SSL/TLS。如果您真的赞扬安全性,请不要考虑任何其他选择。如果我们想在这方面发挥创造力,那么,你承担风险......
于 2012-11-06T18:41:45.253 回答