我试图在客户网站上使用第三方认证web服务。web服务是用.Net编写的,并接受SecureString作为密码类型。
AuthResult Login(string username, SecureString passkey)我的应用程序是用Java编写的,Java中没有兼容的SecureString类型,我可以使用:(当我生成一个轴代理时,它会生成一个存根,没有SecureString的成员,因此我无法对服务进行身份验证调用。
public class SecureString implements java.io.Serializable {
public SecureString() {
...
}
}我正在尝试http://sanguinecomputing.com/a-secure-string-implementation-for-long-term-storage-of-sensitive-data-in-java/,但我不是很有希望
有人能帮我克服这个互操作性问题吗?我正在寻找一种将secureString类型的参数从Java代码发送到.Net服务的方法。
发布于 2014-04-08 21:23:49
经过更多的研究,可以说.Net类型的SecureString是不可互操作的.我已经将请求发送给Service,以便编写一个以char[]为参数的服务。
发布于 2017-10-03 03:00:50
一点儿没错。SecureString不是可序列化的类型。因为SecureString依赖于DPAPI,而DPAPI本身依赖于本地机器属性来构造它的加密密钥/向量。
发布带有SecureString -type参数的API这一事实表明了其设计中的一个重要缺陷。任何远程客户端都不可能提交该参数。
发布于 2014-03-25 23:29:13
..。我的应用程序是用Java编写的,在Java中没有兼容的SecureString类型 ..。有人能帮我克服这个互操作性问题吗?
如您所知,Java中没有SecureString。
在Java中,您应该使用char[]并在完成该材料时覆盖它。来自Java密码扩展参考指南中的使用密码加密:
将密码收集并存储在
java.lang.String类型的对象中似乎是合乎逻辑的。但是,这里有一个警告:类型为Objects的String是不可变的,也就是说,没有定义的方法允许您在使用后更改(覆盖)或清除字符串的内容。此特性使String对象不适合存储用户密码等安全敏感信息。您应该始终将安全敏感信息收集并存储在char数组中。
因此,您的SecureString将有一个私有的char[],并且在销毁时将数组归零。我相信.NET的SecureString在不使用时掩盖了字符串(我不相信它是真正的加密,但我可能错了)。因此,您也需要提供一个掩码功能。
https://stackoverflow.com/questions/22645382
复制相似问题