0

我有一个 Web 服务 (Java),它在所有情况下都需要密码。但是密码必须安全地交给我。是否有适用于所有平台的标准方法-> java 加密/解密。如何解密可能来自随机平台(php、.net、iPhone)的字符串。

4

3 回答 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 回答