Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
Java中的.Net SecureString_Java_Wcf_Wsdl_Axis_Securestring - Fatal编程技术网

Java中的.Net SecureString

Java中的.Net SecureString,java,wcf,wsdl,axis,securestring,Java,Wcf,Wsdl,Axis,Securestring,我正在尝试在客户站点上使用第三方身份验证web服务。web服务是用.Net编写的,并接受SecureString作为密码类型 AuthResult Login(string username, SecureString passkey) 我的应用程序是用Java编写的,Java中没有可使用的SecureString兼容类型:(当我生成axis代理时,它会生成一个没有SecureString成员的存根,因此我无法对服务进行身份验证调用 public class SecureString imp

我正在尝试在客户站点上使用第三方身份验证web服务。web服务是用.Net编写的,并接受SecureString作为密码类型

AuthResult Login(string username, SecureString passkey)
我的应用程序是用Java编写的,Java中没有可使用的SecureString兼容类型:(当我生成axis代理时,它会生成一个没有SecureString成员的存根,因此我无法对服务进行身份验证调用

public class SecureString  implements java.io.Serializable {
    public SecureString() {
        ...
    }
}
我正在努力,但我不是很有希望

有人能帮我解决这个互操作性问题吗?我正在寻找一种方法,将secureString类型的参数从Java应用程序代码发送到.Net服务

…我的应用程序是用Java编写的,Java中没有与SecureString兼容的类型

…有人能帮我解决这个互操作性问题吗

正如您所知,Java中没有
SecureString

在Java中,您应该使用
char[]
并在使用完材料后覆盖该材料。在《Java加密扩展(JCE)参考指南》中:

在对象中收集和存储密码似乎是合乎逻辑的 类型为
java.lang.String
。但是,这里有一个警告:
对象的
类型
String
是不可变的,即没有定义 允许您更改(覆盖)或归零字符串的内容 使用后。此功能使
String
对象不适合 存储用户密码等安全敏感信息。您可以 应始终将安全敏感信息收集并存储在 而不是字符数组


因此,您的
SecureString
将有一个私有
char[]
,您将在销毁时将数组归零。我相信.Net的
SecureString
在不使用时会屏蔽字符串(我不相信它的真正加密,但我可能是错的)。因此,您也需要提供掩码功能。

经过进一步研究,我可以说.Net类型的
SecureString
是不可互操作的。我已向服务提供商发出请求,要求编写一个使用
char[]的服务
作为参数。

完全正确。SecureString不是可序列化的类型。它永远不能跨机器序列化,因为SecureString依赖于DPAPI,而DPAPI本身依赖于本地机器属性来构造其加密密钥/向量


API发布时带有SecureString类型的参数这一事实表明其设计中存在一个重大缺陷。远程客户端不可能将该参数提交。

您应该能够使用常规字符串。我无法控制服务您到底在寻找什么?从“如何克服此互操作性问题”中不清楚.A
SecureString
在Java中的实现?或具有与C#
SecureString
相同方法的实现?或关于在Java中实现的指导?以下内容可能会有所帮助:同意,SecureString在.Net中就是这样做的。但我的问题涉及调用SOAP服务,其中方法中的一个参数类型为SecureString。生成的存根类实际上是空的,因此我无法构造参数。甚至不能从char[]中构造参数。如果我调用的是我控制的服务,我肯定会将参数更改为char[]My bad。我在其上的“security”标记后面提出了一个问题。也许你可以让合适的人参与到相应的标记中(可能是WPF或COM或WSDL或类似的?)。我不太了解web技术,所以我不知道。但是GC不能移动任何数据,包括字符数组吗?那么密码不可能保留在内存中的原始位置吗?关于字符串与字符[],有一个非常好的注释本文中Stanimir Simeonoff提供的安全性:@jww SecureString使用DPAPI加密其内容。加密由操作系统完成,该操作系统还管理对称加密密钥。