java - 需要帮助创建一个有效的随机数

标签 java web-services soap digest wsse

我正在尝试使用使用密码摘要模式的 Web 服务,并且我的 Java 应用程序中有这些函数来生成随机随机数、创建日期和密码摘要。我无法通过“身份验证失败”错误,并且文档并不清楚他们是想要 SHA-1 还是 MD5,因为它顺便提到了这两者。我尝试过使用 MD5 而不是 SHA-1,但得到的结果相同。我设法通过 SoapUI 上的测试让请求工作,但我不知道该应用程序如何生成摘要/随机数。感谢您的帮助。

这是我用来生成随机数和密码摘要的代码:

    private static SOAPMessage createSOAPRequest() throws Exception 
    {
        String password = "FakePassword";

        String nonce = generateNonce(); 
        System.out.println("Nonce = " + nonce);

        DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date today = Calendar.getInstance().getTime();
        String created = dateFormatter.format(today);
        System.out.println("Created = " + created);

        String passwordDigest = buildPasswordDigest(nonce, created, password);
        System.out.println("Password Digest = " + passwordDigest);
    }

    private static String buildPasswordDigest(String nonce, String created, String password) throws NoSuchAlgorithmException, UnsupportedEncodingException
    {
        MessageDigest sha1;
        String passwordDigest = null;

        try
        {
            sha1 = MessageDigest.getInstance("SHA-1");
            sha1.update(Base64.decodeBase64(nonce));
            sha1.update(created.getBytes("UTF-8"));
            passwordDigest = new String(Base64.encodeBase64(sha1.digest(password.getBytes("UTF-8"))));
            sha1.reset();
        }
        catch (NoSuchAlgorithmException e) 
        {
            e.printStackTrace();
        }

        return passwordDigest;
    }

    private static String generateNonce() throws NoSuchAlgorithmException, NoSuchProviderException, UnsupportedEncodingException
    {
        String dateTimeString = Long.toString(new Date().getTime());
        byte[] nonceByte = dateTimeString.getBytes();
        return Base64.encodeBase64String(nonceByte);
    }

最佳答案

解决方案是将行 sha1.update(nonce.getBytes("UTF-8")); 替换为 sha1.update(Base64.decodeBase64(nonce));

关于java - 需要帮助创建一个有效的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400844/

相关文章:

c# - 如何使 WCF 服务服务器-客户端时差独立?

java - Groovy WSClient 和文档/文字 WS

php - 无法在 Debian 9 上安装 php7.4-soap

api - 使用 Confluence REST API,是否可以检索给定页面的浏览量计数?

Java——反射。为动态创建的类对象设置值

java - HBase代码无法在Intellij中成功运行

winforms - 我可以更改配置文件中的 Web 服务引用 URL 吗?

web-services - 添加 ws-security 以在 Mule 中流动

java - 用Java计算AUC

java.lang.NoSuchMethodError : javax. 持久性.PersistenceContext.同步