我没有得到Base64加密.
如果可以解密Base64字符串,它的目的是什么?
为什么它被用于HTTP Basic身份验证?
这就像告诉别人我的密码被反转为OLLEH.
看到OLLEH的人会知道原来的密码是HELLO.
我最近遇到了一个系统,其中所有的数据库连接都是由各种方式模糊的例程管理的,包括base 64编码,md5sums和各种其他技术.
这只是我,还是这种矫枉过正?有哪些替代方案?
我正在开发一个应用程序,我必须存储非常敏感的数据,它不应该与用户联系.我从这个来源得知,如果一个设备是root用户,那么访问SharedPreferences和修改它就是一个很好的例子.我不想要它.那么有什么方法可以保护我SharedPreferences不被任何地方访问.或者更好的是,如果有人可以建议更安全的数据存储选项
在使用EncryptedSharedPreferences之前,我的应用程序在使用 (minifyEnabled = true) 的发布模式下工作正常,将安全库 (版本 1.0.0-rc01)添加到我的应用程序后,应用程序在打开时崩溃,如果我使用 (minifyEnabled = false),应用程序可以正常工作好吧,我想我在proguard-rules.pro 中遗漏了一些东西,但我搜索了很多没有找到任何东西。
在阅读了大量文章和 stackoverflow 帖子后,与使用非加密对应部分相比,我找不到使用 EncryptedSharedPreferences 或 EncryptedFile 的具体原因。
\n首先,我想谈谈必须考虑安全性的设备的两种状态:
\n当设备未受到损害时,应用程序将被沙箱化。只要应用程序遵循Android 的安全最佳实践,那么应用程序就应该没问题——安全方面。由于当设备不包含在内时,内部应用程序数据是安全的,因此无需对其进行加密。
\n当设备受到损害时,应用程序几乎无法保护自己。唯一真正的策略是最大限度地减少设备上的敏感数据量。然而,EncryptedSharedPreferences 和 EncryptedFile 似乎意味着即使设备受到威胁,它也可以保护用户数据,正如 Android 博客Data Encryption on Android with Jetpack Security中所述:
\n\n\n为什么要加密应用程序中的数据?Android从5.0开始默认加密用户数据分区的内容吗?当然可以,但在某些用例中,您可能需要额外级别的保护...在应用程序主目录中,如果您的应用程序处理敏感信息(包括但不限于个人身份信息 (PII)),则您的应用程序应该加密数据、健康记录、财务详细信息或企业数据。
\n
但“额外保护级别”是什么意思呢?根据同一个博客:
\n\n\n在我们开始加密您的数据之前,了解如何保证您的加密密钥的安全非常重要。Jetpack Security 使用主密钥...生成并存储在 AndroidKeyStore 中。
\n
因此Jetpack的EncryptedSharedPreferences和EncyptedFile使用KeyStore来生成和存储用于加密的密钥。这是通过检查源代码来验证的。而这也是问题所在。
\nKeyStore无意生成密钥来加密设备本地数据。正如Android - What are the effective security Benefits …
security encryption android android-keystore android-jetpack
在 Android Kotlin 项目中,我使用androidx.security库基于此链接实现了 EncryptedSharedPreference 功能,并且它在调试模式下运行良好。但是在发布模式下,我不断收到此错误
java.lang.ExceptionInInitializerError
at com.package_name.i.a.f(:46)
at com.package_name.i.a.j(:52)
at com.package_name.i.a.e(:82)
at com.package_name.MyApplication.onCreate(:37)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.RuntimeException: Field keySize_ for k.a.d.a.h0.u not found. Known fields are [private int k.a.d.a.h0.u.i, private static final k.a.d.a.h0.u k.a.d.a.h0.u.j, private static volatile k.a.d.a.i0.a.a1 k.a.d.a.h0.u.k]
at k.a.d.a.i0.a.v0.n0(:608)
Run Code Online (Sandbox Code Playgroud)
请分享您对如何解决此错误的想法。
我是新手,Dagger2并试图建立这样的样本,以了解它是如何工作的.
有我的示例代码:
MainActivity
public class MainActivity extends AppCompatActivity {
@Inject
protected ApiInterface apiInterface;
@Inject
protected Integer valueInt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
App.getComponent().inject(this);
}
public void testButton(View view) {
if (apiInterface == null || valueInt == null) {
Log.e("TAG", "apiInterface == null");
} else {
Log.e("TAG", "apiInterface != null : " + apiInterface.value + " : " + valueInt);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Component
@Singleton
@Component(modules = {ModelModule.class, AnotherModule.class})
interface AppComponent {
void inject(MainActivity mainActivity);
} …Run Code Online (Sandbox Code Playgroud) android ×4
security ×4
encryption ×3
androidx ×1
base64 ×1
dagger-2 ×1
encrypted-shared-preference ×1
java ×1
proguard ×1