我需要從我的客戶端進程傳遞一個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) –