因此,我已将用于加密的密钥作为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.ProtectedMemory
和ProtectedMemory.Protect
包装一个Action,以便在Action完成时再次保护密钥。问题是我当时并没有考虑线程问题,而遇到了一个错误,即两个线程同时访问密钥提供者,连续两次调用Protect或Unprotect导致第二个线程的密钥不正确。
我不想锁定密钥提供者对象(当前将其作为单例服务),因为这意味着一次只能加密一件事,这可能会使事情变慢很多。取而代之的是,我想在执行上一个Action之前保持不受保护的密钥,如果当前没有正在运行的Action,则保护密钥。
我能够使用某些静态类的方法和计数器来解决该错误,以跟踪是否正在使用该密钥,但我担心它不是线程安全的。我已经尝试搜索此问题,但是我缺少合适的词来获得成功。
这是我要确保安全的原始代码:
ProtectedMemory.Unprotect