Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据Web服务器中的php部分在android java中实现WSSE身份验证?_Java_Php_Encryption_Ws Security_Wsse - Fatal编程技术网

如何根据Web服务器中的php部分在android java中实现WSSE身份验证?

如何根据Web服务器中的php部分在android java中实现WSSE身份验证?,java,php,encryption,ws-security,wsse,Java,Php,Encryption,Ws Security,Wsse,我将symfony2用于web服务器,并将wsse身份验证与x-wsse头一起使用 实际上,问题是我应该在Java中使用哪些确切的函数来给出与PHP相同的结果 用于头生成的PHP部分: $nonce = substr( md5( uniqid( 'nonce_', true ) ), 0, 16 ); $nonceHigh = base64_encode( $nonce ); $passwordDigest = base64_encode( sha1( $nonce . $created . $

我将symfony2用于web服务器,并将wsse身份验证与x-wsse头一起使用

实际上,问题是我应该在Java中使用哪些确切的函数来给出与PHP相同的结果

用于头生成的PHP部分:

$nonce = substr( md5( uniqid( 'nonce_', true ) ), 0, 16 );
$nonceHigh = base64_encode( $nonce );
$passwordDigest = base64_encode( sha1( $nonce . $created . $password . "{" . $user->getSalt() . "}", true ) );
$header = "UsernameToken Username=\"{$username}\", PasswordDigest=\"{$passwordDigest}\", Nonce=\"{$nonceHigh}\", Created=\"{$created}\"";
用于标头验证的PHP部分:

$expected = base64_encode( sha1( base64_decode( $nonce ) . $created . $secret, true ) );
我不知道为什么它直接使用nonceHigh而不是nonce?我相信这会导致java出现问题。我也不知道应该生成nonce还是使用从服务器生成的nonce。为了进行比较,我重用了来自服务器的nonce来生成摘要

byte [] nonceLow = Base64.decode(nonceHigh, Base64.DEFAULT); // nonceHigh is from above
String nonce = String.valueOf(nonceLow); // this give strange result. is it wrong?
String temp = nonce + format(now) + password;
try {
    MessageDigest md = MessageDigest.getInstance("SHA1");
    //new String(Base64.encodeBase64(md.digest(temp.getBytes())));
    digest = Base64.encodeToString(md.digest(temp.getBytes("UTF-8")), Base64.DEFAULT);
} catch (Exception e) {
    throw new AuthenticationException(e.getMessage(), e);
}

String wsse =
    "UsernameToken Username=\"" + username
        + "\", "
        + "PasswordDigest=\""
        + digest
        + "\", "
        + "Nonce=\""
        + nonceHIGH
        + "\", "
        + "Created=\""
        + format(now)
        + "\"";
问题是:

  • 为什么PHP使用nonechight而不是nonce
  • android java
    Base64.encodeToString()==php Base64\u encode()
  • android java
    Base64.decode()==php Base64\u decode()

  • 没有人回答。好的,我把我的发现放在这里,以防有人遇到同样的问题。这就解决了问题

    Base64.encodeToString(temp.getBytes("ISO-8859-1"), Base64.NO_WRAP);
    

    嗨,燕,我也面临同样的问题。但我不明白你是如何纠正这个问题的。你能把你的全部代码贴在这里吗?你能告诉我你是如何生成时间戳的吗?什么是方法格式?我有个问题:,你能帮我吗?非常感谢。