如何为 Xamarin 应用程序创建离线验证系统?
How can I create an offline validation system for a Xamarin app?
我创建了一个可以完全离线运行的 Xamarin 应用程序。
我想实施某种机制来验证带有 Key/Password 的应用程序。
我有以下想法:
- 从带有按钮的应用中生成一种随机密钥。
- 从另一个应用程序,输入上一个密钥并生成最终密钥。
- 最后在应用中输入新生成的密码。
是否可以做类似的事情?有什么方法可以做到吗?
任何需要提示或帮助的人都将不胜感激。
根据您的要求,您可以制作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>
另一个APP
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();
}
我创建了一个可以完全离线运行的 Xamarin 应用程序。
我想实施某种机制来验证带有 Key/Password 的应用程序。
我有以下想法:
- 从带有按钮的应用中生成一种随机密钥。
- 从另一个应用程序,输入上一个密钥并生成最终密钥。
- 最后在应用中输入新生成的密码。
是否可以做类似的事情?有什么方法可以做到吗?
任何需要提示或帮助的人都将不胜感激。
根据您的要求,您可以制作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>
另一个APP
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();
}