仅在未采取必要措施的情况下对线程进行安全保护,以保护线程的安全

时间:2018-08-09 13:54:50

标签: c# .net multithreading thread-safety

因此,我已将用于加密的密钥作为08/09 20:31:31: Launching app No apk changes detected since last installation, skipping installation of /home/soumyajit/AndroidStudioProjects/MaterialReader/app/build/outputs/apk/debug/app-debug.apk $ adb shell am force-stop lordsomen.android.com.materialreader $ adb shell am start -n "lordsomen.android.com.materialreader/lordsomen.android.com.materialreader.activities.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D Connecting to lordsomen.android.com.materialreader Connected to the target VM, address: 'localhost:8601', transport: 'socket' Disconnected from the target VM, address: 'localhost:8601', transport: 'socket' 加载,并希望将byte[]用作已加载密钥上的附加安全层。想法是要有一个对象,该对象可以私下存储和提供密钥,并用System.Security.Cryptography.ProtectedMemoryProtectedMemory.Protect包装一个Action,以便在Action完成时再次保护密钥。问题是我当时并没有考虑线程问题,而遇到了一个错误,即两个线程同时访问密钥提供者,连续两次调用Protect或Unprotect导致第二个线程的密钥不正确。

我不想锁定密钥提供者对象(当前将其作为单例服务),因为这意味着一次只能加密一件事,这可能会使事情变慢很多。取而代之的是,我想在执行上一个Action之前保持不受保护的密钥,如果当前没有正在运行的Action,则保护密钥。

我能够使用某些静态类的方法和计数器来解决该错误,以跟踪是否正在使用该密钥,但我担心它不是线程安全的。我已经尝试搜索此问题,但是我缺少合适的词来获得成功。

这是我要确保安全的原始代码:

ProtectedMemory.Unprotect

0 个答案:

没有答案