我在这里遇到一个奇怪的问题。 我有两个字符串要比较。
让我们称之为:
字符串“ A”和字符串“ B”。
两个字符串都有相同的数据
“ A”:“ 1234”和“ B”:“ 1234”
但是比较时,它们并不相同或不相等。
我尝试修剪两个字符串。但是结果仍然不相等。
然后我尝试检查字符串长度。
“ A”包含4,而“ B”包含16。
所以这是
字符串“ A”的长度为4,字符串“ B”的长度为16。
怎么可能这样?
所以现在我无法比较它。
请注意。 字符串“ B” 数据是来自数据库的解密数据。但是长度变成了16。
我该如何解决?或将字符串“ B”恢复为正常。
谢谢
编辑:
我把屏幕截图试了看
这是我使用的代码:
if (Input_PIN.text.Length >= 4)
{
Debug.Log("A Text : " + Input_PIN.text);
Debug.Log("A Lenght : " + Input_PIN.text.Length);
Debug.Log("B Text : " + user_account_detail.Pin);
Debug.Log("B Lenght : " + user_account_detail.Pin.Length);
if (Input_PIN.text.Trim() == user_account_detail.Pin.Trim())
{
UnityEngine.SceneManagement.SceneManager.LoadScene("scene_foundation");
}
else
{
UtilityScript.GetComponent<utility>().MessageBox_Pin_Wrong();
Input_PIN.text = "";
}
}
这是我用于字符串“ B”的decrpyt代码:
public static string Decrypt(string prm_text_to_decrypt, string prm_key, string prm_iv)
{
var sEncryptedString = prm_text_to_decrypt;
var rj = new RijndaelManaged()
{
Padding = PaddingMode.PKCS7,
Mode = CipherMode.CBC,
KeySize = 256,
BlockSize = 128,
};
var key = Convert.FromBase64String(prm_key);
var IV = Convert.FromBase64String(prm_iv);
var decryptor = rj.CreateDecryptor(key, IV);
var sEncrypted = Convert.FromBase64String(sEncryptedString);
var fromEncrypt = new byte[sEncrypted.Length];
var msDecrypt = new MemoryStream(sEncrypted);
var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return (Encoding.ASCII.GetString(fromEncrypt));
}
答案 0 :(得分:4)
我的猜测是您误读了一个字节数组,并在字符串末尾以空字符 '\0'
结尾。
var pin1 = Input_PIN.text.Trim('\0');
var pin2 = user_account_detail.Pin.Trim('\0');
更新
是的。我用('\ 0')修剪,现在可以使用了。但是为什么我 需要修饰('\ 0')吗?
由于Trim()
不处理空字符,因此您必须明确指定它们
但是,设计问题是为什么要首先使用它们