Skip to content

Commit

Permalink
fix SendSmsUIHelper for Android, improve RSAUtils & API Error 1006
Browse files Browse the repository at this point in the history
  • Loading branch information
AigioL committed Jun 25, 2021
1 parent 9921781 commit 7f57f01
Show file tree
Hide file tree
Showing 12 changed files with 284 additions and 143 deletions.
112 changes: 83 additions & 29 deletions src/Common.CoreLib/Security/Cryptography/RSAUtils.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Text;
using System.Text;
using N_JsonProperty = Newtonsoft.Json.JsonPropertyAttribute;
using S_JsonProperty = System.Text.Json.Serialization.JsonPropertyNameAttribute;

Expand Down Expand Up @@ -137,11 +137,44 @@ public static string ToJsonString(this RSA rsa, bool includePrivateParameters)

#endregion

#region Padding

/// <summary>
/// RSA 填充,不可更改此值!
/// </summary>
[Obsolete]
internal static RSAEncryptionPadding Padding => RSAEncryptionPadding.OaepSHA256;

public static RSAEncryptionPadding CreateOaep(string oaepHashAlgorithmName)
{
try
{
var hashAlgorithm = new HashAlgorithmName(oaepHashAlgorithmName);
return RSAEncryptionPadding.CreateOaep(hashAlgorithm);
}
catch
{
return Padding;
}
}

public static RSAEncryptionPadding DefaultPadding
{
get
{
if (DI.IsRunningOnMono)
{
return RSAEncryptionPadding.OaepSHA1;
}
else
{
return RSAEncryptionPadding.OaepSHA256;
}
}
}

#endregion

#region 加密(Encrypt)

/// <summary>
Expand All @@ -150,53 +183,60 @@ public static string ToJsonString(this RSA rsa, bool includePrivateParameters)
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <returns></returns>
[Obsolete()]
public static byte[] Encrypt(this RSA rsa, byte[] data) => rsa.Encrypt(data, Padding);

/// <summary>
/// RSA加密(ByteArray → ByteArray)
/// </summary>
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static byte[]? Encrypt_Nullable(this RSA rsa, byte[]? data)
public static byte[]? Encrypt_Nullable(this RSA rsa, byte[]? data, RSAEncryptionPadding? padding = null)
{
if (data == default) return default;
return Encrypt(rsa, data);
padding ??= DefaultPadding;
return rsa.Encrypt(data, padding);
}

/// <summary>
/// RSA加密(String → ByteArray)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static byte[] EncryptToByteArray(this RSA rsa, string text)
public static byte[] EncryptToByteArray(this RSA rsa, string text, RSAEncryptionPadding? padding = null)
{
var data = Encoding.UTF8.GetBytes(text);
return Encrypt(rsa, data);
padding ??= DefaultPadding;
return rsa.Encrypt(data, padding);
}

/// <summary>
/// RSA加密(String → ByteArray)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static byte[]? EncryptToByteArray_Nullable(this RSA rsa, string? text)
public static byte[]? EncryptToByteArray_Nullable(this RSA rsa, string? text, RSAEncryptionPadding? padding = null)
{
if (text == default) return default;
return EncryptToByteArray(rsa, text);
return EncryptToByteArray(rsa, text, padding);
}

/// <summary>
/// RSA加密(String → String)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string Encrypt(this RSA rsa, string text)
public static string Encrypt(this RSA rsa, string text, RSAEncryptionPadding? padding = null)
{
var bytes = EncryptToByteArray(rsa, text);
var bytes = EncryptToByteArray(rsa, text, padding);
return bytes.Base64UrlEncode();
}

Expand All @@ -205,22 +245,24 @@ public static string Encrypt(this RSA rsa, string text)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string? Encrypt_Nullable(this RSA rsa, string? text)
public static string? Encrypt_Nullable(this RSA rsa, string? text, RSAEncryptionPadding? padding = null)
{
if (text == default) return default;
return Encrypt(rsa, text);
return Encrypt(rsa, text, padding);
}

/// <summary>
/// RSA加密(ByteArray → String)
/// </summary>
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string EncryptToString(this RSA rsa, byte[] data)
public static string EncryptToString(this RSA rsa, byte[] data, RSAEncryptionPadding? padding = null)
{
var bytes = Encrypt(rsa, data);
var bytes = rsa.Encrypt(data, padding);
return bytes.Base64UrlEncode();
}

Expand All @@ -229,11 +271,12 @@ public static string EncryptToString(this RSA rsa, byte[] data)
/// </summary>
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string? EncryptToString_Nullable(this RSA rsa, byte[]? data)
public static string? EncryptToString_Nullable(this RSA rsa, byte[]? data, RSAEncryptionPadding? padding = null)
{
if (data == default) return default;
return EncryptToString(rsa, data);
return EncryptToString(rsa, data, padding);
}

#endregion
Expand All @@ -246,53 +289,61 @@ public static string EncryptToString(this RSA rsa, byte[] data)
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <returns></returns>
[Obsolete]
public static byte[] Decrypt(this RSA rsa, byte[] data) => rsa.Decrypt(data, Padding);

/// <summary>
/// RSA解密(ByteArray → ByteArray)
/// </summary>
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static byte[]? Decrypt_Nullable(this RSA rsa, byte[]? data)
public static byte[]? Decrypt_Nullable(this RSA rsa, byte[]? data, RSAEncryptionPadding? padding = null)
{
if (data == default) return default;
return Decrypt(rsa, data);
padding ??= DefaultPadding;
return rsa.Decrypt(data, padding);
}

/// <summary>
/// RSA解密(String → ByteArray)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static byte[] DecryptToByteArray(this RSA rsa, string text)
public static byte[] DecryptToByteArray(this RSA rsa, string text, RSAEncryptionPadding? padding = null)
{
var bytes = text.Base64UrlDecodeToByteArray();
return Decrypt(rsa, bytes);
padding ??= DefaultPadding;
return rsa.Decrypt(bytes, padding);
}

/// <summary>
/// RSA解密(String → ByteArray)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static byte[]? DecryptToByteArray_Nullable(this RSA rsa, string? text)
public static byte[]? DecryptToByteArray_Nullable(this RSA rsa, string? text, RSAEncryptionPadding? padding = null)
{
if (text == default) return default;
return DecryptToByteArray(rsa, text);
return DecryptToByteArray(rsa, text, padding);
}

/// <summary>
/// RSA解密(ByteArray → String)
/// </summary>
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string DecryptToString(this RSA rsa, byte[] data)
public static string DecryptToString(this RSA rsa, byte[] data, RSAEncryptionPadding? padding = null)
{
var bytes = Decrypt(rsa, data);
padding ??= DefaultPadding;
var bytes = rsa.Decrypt(data, padding);
return Encoding.UTF8.GetString(bytes);
}

Expand All @@ -301,22 +352,24 @@ public static string DecryptToString(this RSA rsa, byte[] data)
/// </summary>
/// <param name="rsa"></param>
/// <param name="data"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string? DecryptToString_Nullable(this RSA rsa, byte[]? data)
public static string? DecryptToString_Nullable(this RSA rsa, byte[]? data, RSAEncryptionPadding? padding = null)
{
if (data == default) return default;
return DecryptToString(rsa, data);
return DecryptToString(rsa, data, padding);
}

/// <summary>
/// RSA解密(String → String)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string Decrypt(this RSA rsa, string text)
public static string Decrypt(this RSA rsa, string text, RSAEncryptionPadding? padding = null)
{
var result = DecryptToByteArray(rsa, text);
var result = DecryptToByteArray(rsa, text, padding);
return Encoding.UTF8.GetString(result);
}

Expand All @@ -325,11 +378,12 @@ public static string Decrypt(this RSA rsa, string text)
/// </summary>
/// <param name="rsa"></param>
/// <param name="text"></param>
/// <param name="padding"></param>
/// <returns></returns>
public static string? Decrypt_Nullable(this RSA rsa, string? text)
public static string? Decrypt_Nullable(this RSA rsa, string? text, RSAEncryptionPadding? padding = null)
{
if (text == default) return default;
return Decrypt(rsa, text);
return Decrypt(rsa, text, padding);
}

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,18 @@ protected override void OnDataContextChanged(EventArgs e)
if (DataContext is BindPhoneNumberWindowViewModel vm)
{
vm.Close = Close;
vm.TbPhoneNumberFocus = TbPhoneNumber.Focus;
vm.TbSmsCodeFocus = TbSmsCode.Focus;
}
}

protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (DataContext is BindPhoneNumberWindowViewModel vm)
{
vm.RemoveAllDelegate();
}
if (DataContext is IDisposable disposable)
{
disposable.Dispose();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ protected override async void OnClosing(CancelEventArgs e)
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (DataContext is ChangeBindPhoneNumberWindowViewModel vm)
{
vm.RemoveAllDelegate();
}
if (DataContext is IDisposable disposable)
{
disposable.Dispose();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ protected override void OnDataContextChanged(EventArgs e)
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (DataContext is LoginOrRegisterWindowViewModel vm)
{
vm.RemoveAllDelegate();
}
if (DataContext is IDisposable disposable)
{
disposable.Dispose();
Expand Down
Loading

0 comments on commit 7f57f01

Please sign in to comment.