我创建了一个Xamarin应用程序,可以完全离线运行。
我想实现一些机制,用密钥/密码验证应用程序。
我脑海中有这样的东西:
- 从带有按钮的应用程序中,生成一种随机密钥
- 在另一个应用程序中,输入上一个密钥并生成最终密钥
- 最后在应用程序中输入新生成的密码
有可能做类似的事情吗?有什么方法可以做到这一点吗?
任何想要得到提示或帮助的人都将不胜感激。
根据您的需要,您可以制作32位随机字符生成器,并将此32位随机字符串复制到另一个应用程序中进行MD5加密。然后使用MD5结果进行验证。
主APP
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void Button_Clicked(object sender, EventArgs e)
{
KeyLabel.Text = CDKMaker();
Clipboard.SetTextAsync(KeyLabel.Text);
}
public string CDKMaker()
{
var key = Guid.NewGuid().ToString().Replace("-", "").Substring(0);
var value = EncryptString(key);
Preferences.Set("my_key", value);
return key;
}
private string EncryptString(string str)
{
MD5 md5 = MD5.Create();
byte[] byteOld = Encoding.UTF8.GetBytes(str);
byte[] byteNew = md5.ComputeHash(byteOld);
StringBuilder sb = new StringBuilder();
foreach (byte b in byteNew)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
private void Login(object sender, EventArgs e)
{
if (PWLabel.Text == Preferences.Get("my_key", "default_value"))
{
// login successfully
}
else
{
//login faild
}
}
}
xaml
<StackLayout Orientation="Vertical" Padding="0,44,0,0">
<Label x:Name="KeyLabel" Text="This original Key" VerticalOptions="Center"/>
<Button Text="Make 32 Bit Random" Clicked="Button_Clicked"/>
<Entry x:Name="PWLabel" Placeholder="Please input password" VerticalOptions="Center" />
<Button Text="Login" Clicked="Login"/>
</StackLayout>
另一个应用
private async void Button_Click(object sender, RoutedEventArgs e)
{
// Main app has insert the cdk into clipboard. please press ctrl + v pasted.
var Password = EncryptString(cdk);
}
public static string EncryptString(string str)
{
MD5 md5 = MD5.Create();
byte[] byteOld = Encoding.UTF8.GetBytes(str);
byte[] byteNew = md5.ComputeHash(byteOld);
StringBuilder sb = new StringBuilder();
foreach (byte b in byteNew)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}