我目前使用Preferences来保存我在应用程序中重复使用的所有其他数据.所以,当涉及到SSH凭证时,host/port/username可以以明文存储,但是如何处理密码呢?

        Preferences.Default.Set("hostname", entryHostname.Text);
        Preferences.Default.Set("port", int.Parse(entryPort.Text));
        Preferences.Default.Set("username", entryUsername.Text);

它可以加密并存储为stringbyte数组吗?

也许序列化一个ConnectionInfo对象并保存为.json文件?

还有什么其他 Select ?其他应用程序如何以安全的方式存储凭据?


JuiceSSH或Raspicast作为参考

enter image description here enter image description here

以下是Raspicast如何处理SSH密码: https://github.com/HaarigerHarald/raspicast/blob/3395f68a969376afba44ece3e4c9b2932c485c6b/src/main/java/at/huber/raspicast/utils/PasswordEncrypter.java

推荐答案

PreferencesSecure storage都可以达到同样的效果. SecureStorage使用Preferences API,并遵循Preferences文档中概述的相同数据持久性.

然而,SecureStorage的数据是使用Android Security库中的Android EncryptedSharedPreferences类加密的,该库封装了SharedPreferences类并自动加密密钥和值.

因此,在安全性方面,SecureStoragePreferences更安全.

有关详细信息,您可以查看文档Platform differences of SecureStorageLimitations.

Csharp相关问答推荐

等待限制选项似乎不适用于频道

如何使用while循环实现异常处理

SignalR客户端不会打印队列位置'

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

从Blob存储中提取tar.gz文件并将提取结果上载到另一个Blob存储

从c#列表中删除额外的对象&对象&>从ASP.NET WebForm返回json响应

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

如何通过寻找向量长度来优化两个循环?

如何比较C#中的L和ł(波兰字符)返回TRUE

EF核心区分大小写的主键

Lambda表达式如何与隐式强制转换一起工作?

如何在CSharp中将json字符串转换为DataTable?

为什么此名称不再被识别?名称不存在于当前上下文中?

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

是否可以从IQueryable T中获取一个IdentyEntry T>

C#无法将.csv列转换为用于JSON转换的列表

如何从SignalR获取连接客户端的域

如何在ASP.NET Core 8中获取键控服务词典

为什么连接到Google OAuth2后,结果.Credential为空?

Azure队列触发器未使用隔离的工作进程执行