我需要从我的客户端进程传递一个SecureString
我的服务。两者都是使用.NET和C#编写的。我使用命名管道在进程之间传递数据。我的问题是如何获得SecureString
作为字节数组传递给另一个进程?然后在接收过程中重新组装回SecureString
?如何将SecureString从一个进程传递到另一个进程?
1
A
回答
0
因为我们也有同样的问题,因为我们无法访问加密的字节我们所做的是,访问飞解密的字节,并使用我们自己的算法或加密技术进行加密。另一端解密字节并逐字节地分配给SecureString,调用AppendChar函数。
代码访问字节数组SecureString的
IntPtr passwordBytes = Marshal.SecureStringToCoTaskMemUnicode(password);
try
{
unsafe
{
byte* byteArrayStart = (byte*)passwordBytes.ToPointer();
int length = password.Length;
byte[] encrypted = new byte[length];
for (int i = 0; i < length; ++i)
{
encrypted[i] = EncryptByte(*(byteArrayStart + i));
}
}
}
finally
{
// This removed the decrypted data bytes from memory as soon as we finished encrypting bytes. Thus reducing the window that any one can access the secure password
Marshal.ZeroFreeGlobalAllocAnsi(passwordBytes);
}
的现在,对其他流程方面,我相信代码将是简单的解密,并分配给SecureString的。请记住,我们使用了AppendChar函数,以便所有解密的字节不会立即显示或连续显示(减少看到密码的机会)。
例,
SecureString mypassword = new SecureString();
for (int i = 0; i < length; ++i) //length of bytes
{
mypassword.AppendChar ((char) DecryptByte(encryptedByteBuffer[i]));
}
相关问题
- 1. 如何将字符串从一个进程传递到另一个进程?
- 2. 如何将托管对象从一个进程传递到另一个进程?
- 3. 如何将COM指针从一个进程传递到另一个进程?
- 4. 可以将变量从一个进程传递到另一个进程吗?
- 5. 无法将字符串从一个进程传递到另一个进程
- 6. 指针传递到另一个进程
- 7. 如何将一个页面从一个进程复制到另一个进程?
- 8. 如何将参数传递到另一个进程在C#
- 9. 将字符串从进程传递到另一个工作进程C#?
- 10. 如何将输出从一个外部进程输入到另一个进程?
- 11. 如何将pid从一个PHP进程与另一个进程进行通信?
- 12. 将stderr从一个进程写入另一个进程C++/unix
- 13. 将竹器从一个工程传递到另一个工程
- 14. 将变量从一个过程传递到另一个过程
- 15. 将值从一个Python程序传递到另一个程序
- 16. 需要Ping从一个进程到另一个进程
- 17. 如何将OpenSSL套接字传递给另一个进程
- 18. 如何将信号传递给另一个进程?
- 19. 将命令从另一个进程传递给Java守护进程
- 20. 从一个进程到另一个进程的ZMQ数据传输延迟?
- 21. 如何将数据从后台进程传递到另一个活动
- 22. 如何将一个进程的stdout重定向到另一个进程的stdin?
- 23. 如何在python中将输出从第一个进程(函数)传递到下一个进程(函数)?
- 24. 从另一个进程
- 25. 从Windows另一个进程
- 26. `mlockall`到另一个进程
- 27. PostThreadMessage到另一个进程
- 28. 如何使一个进程等待另一个进程
- 29. 如何从另一个进程/内核线程中抢占一个进程?
- 30. 将远程对象从一个应用程序域传递到另一个进程
你真的*** ***需要使用SecureString的?由于需要将字符串传递到字节数组进行序列化,无论如何,您将释放99%的保护。 *可以*只用'String'来代替? –
@ScottChamberlain:好吧,SecureString被表示为一个内存字节数组,对吧?我正在考虑传递该字节数组而不是将其解密为字符串。 – c00000fd
它被存储为一个加密的字节数组,但你不能直接获得访问加密的字节数组,他们只访问字符串的方法是将其解密非托管内存。根据到底是哪IPC你使用你可以只是路过['SecureStringToGlobalAllocUnicode']返回的指针(http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.securestringtoglobalallocunicode。 aspx) –