当前位置: 首页 > 知识库问答 >
问题:

在Java中实现ws-security UsernameToken的密码摘要

苏彭薄
2023-03-14

我正试图从一个服务器调用ws-security安全的Web服务,不幸的是,该服务器本机不支持此功能。我采取的方法是实施一个。jsp作为实际endpointURL的反向代理,在添加带有ws-security元素的元素的过程中。

这似乎运行得很好,我相信我已经用正确的命名空间正确地构建了XML。我已经通过比较XML和SOAP-UI产生的XML来验证了这一点。

问题是在实现密码摘要生成器时。我没有得到与SOAP-UI相同的结果,使用相同的输入用于NOne、xsd: dateTime和密码以及下面的代码。

StringBuffer passwordDigestStr_ = new StringBuffer();

// First append the NOnce from the SOAP header
passwordDigestStr_.append(Base64.decode("PzlbwtWRpmFWjG0JRIRn7A=="));

// Then append the xsd:dateTime in UTC timezone
passwordDigestStr_.append("2012-06-09T18:41:03.640Z");

// Finally append the password/secret
passwordDigestStr_.append("password");

System.out.println("Generated password digest: " + new String(com.bea.xbean.util.Base64.encode(org.apache.commons.codec.digest.DigestUtils.sha(passwordDigestStr_.toString())), "UTF-8"));

我认为问题在于实现前两个元素的散列,如http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf

请注意,nonce使用其解码值的八位字节序列进行散列,而时间戳使用其UTF8编码的八位字节序列进行散列,如元素内容中所指定。

如果有人能帮我解决这个问题,那就太好了,因为它开始让我发疯了!如果你能提供源代码,那就太理想了。

共有2个答案

魏彦
2023-03-14

对于延迟回复表示歉意,尤其是考虑到您最初的快速回复。我现在已经能够利用你的方法的精髓来避免任何字符编码问题。然而,java。尼奥。ByteBuffer引起了我的问题,所以我修改了代码,使用基本的字节[]s,我使用系统组合了这些字节。arrayCopy()。我面临的问题是java。尼奥。ByteBuffer是这样的,尽管“buf”。position()'返回适当数量的字节,所有注入byte[]的字节通过buf进行散列。get(toHash)0!

非常感谢你的帮助。

壤驷阳冰
2023-03-14

我将在没有SOAP-UI的情况下尝试一下。散列函数的输入应该是字节,而不是字符串<代码>摘要。sha()将允许您使用字符串,但该字符串必须正确编码。编写nonce时,调用的是StringBuffer。append(Object)最终调用byte[]。toString()。这会给你一些类似于[B@3e25a5,绝对不是你想要的。通过到处使用字节,您应该避免这个问题。请注意,下面的示例使用了org。阿帕奇。平民编解码器。二进制的Base64,而不是您使用的Base64类。没关系,那只是我手边的一个。

ByteBuffer buf = ByteBuffer.allocate(1000);
buf.put(Base64.decodeBase64("PzlbwtWRpmFWjG0JRIRn7A=="));
buf.put("2012-06-09T18:41:03.640Z".getBytes("UTF-8"));
buf.put("password".getBytes("UTF-8"));
byte[] toHash = new byte[buf.position()];
buf.rewind();
buf.get(toHash);
byte[] hash = DigestUtils.sha(toHash);
System.out.println("Generated password digest: " + Base64.encodeBase64String(hash));
 类似资料:
  • 问题内容: 是否有针对JAX-WS RI,Axis2,CXF或其他工具包的WS-Discovery规范的任何实现? 问题答案: 我知道的唯一Java实现是以下一种:http : //code.google.com/p/java-ws-discovery/ Wiki中有JAX-WS示例。

  • 在之前的案例中,我们的密码都是以明文形式存储在数据库中,明文存储给系统安全带来了极大的风险。本节将演示在摘要认证中,实现对密码进行加密存储。 在 digest-authentication项目的基础上,我们构建了一个digest-password-encode项目。 build.gradle 修改 build.gradle 文件,让我们的digest-password-encode项目成为一个新的

  • 本文向大家介绍Java加密 消息摘要算法SHA实现详解,包括了Java加密 消息摘要算法SHA实现详解的使用技巧和注意事项,需要的朋友参考一下 SHA是消息摘要算法的一种实现方式,前面已经总结过MD2\4\5的实现,接下来就为大家总结一下SHA的实现。 SHA的jdk实现: SHA的BC实现: 对于SHA224,JAVA jdk并没有提供实现,下面是利用BC实现的方法: 对于SHA224还有一种类

  • 本文向大家介绍Java加密 消息摘要算法MAC实现详解,包括了Java加密 消息摘要算法MAC实现详解的使用技巧和注意事项,需要的朋友参考一下 MAC是消息摘要算法的第三种实现方式,另外两种方式分别为:MD2\4\5、SHA。 MAC的jdk实现:1、默认密钥方式 2、动态密钥方式: MAC的BC实现: 到今天JAVA中的Base64、对称加密、消息摘要加密的实现总结就完工了,如果哪位对此感兴趣,

  • 本文向大家介绍Java 信息摘要加密MD2、MD4、MD5实现详解,包括了Java 信息摘要加密MD2、MD4、MD5实现详解的使用技巧和注意事项,需要的朋友参考一下 对于用户数据的保密一直是各个互联网企业头疼的事,那如何防止用户的个人信息泄露呢?今天为大家介绍一种最简单的加密方式--信息摘要算法MD。它如何来保护用户的个人信息呢?其实很简单,当获得到用户的信息后,先对其进行加密,然后将加密的结果

  • 问题内容: 我可能很快就会教“ Java速成课程”。虽然可以很安全地假设受众成员知道Big-O表示法,但是假设他们将知道各种集合实现上的各种操作的顺序可能是不安全的。 我可能会花一些时间自己生成一个摘要矩阵,但是如果它已经存在于公共领域中的某个地方,我肯定会重用它(当然要有适当的信誉)。 有人有指针吗? 问题答案: 我可能很快就会教“ Java速成课程”。虽然可以很安全地假设受众成员知道Big-O