1

SecureStringクライアント プロセスからサービスにa を渡す必要があります。どちらも .NET と C# を使用して記述されています。プロセス間でデータを渡すために名前付きパイプを使用しています。私の質問は、SecureStringas バイト配列にアクセスして別のプロセスに渡す方法ですか? SecureStringそして、受信プロセスで再び組み立てますか?

4

1 に答える 1

0

私たちも同じ問題を抱えており、暗号化されたバイトにアクセスできなかったため、オンザフライで復号化されたバイトにアクセスし、独自のアルゴリズムまたは暗号化技術を使用して暗号化しました。そして反対側では、バイトを復号化し、AppendChar関数を呼び出してSecureStringにバイトごとに割り当てました。
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] ));                       
 }
于 2013-10-12T13:01:10.927 に答える