字符串长度不等于字符串数据Unity C#

时间:2019-03-07 04:47:47

标签: c# unity3d

我在这里遇到一个奇怪的问题。 我有两个字符串要比较。

让我们称之为:

字符串“ A”和字符串“ B”。

两个字符串都有相同的数据

“ A”:“ 1234”和“ B”:“ 1234”

但是比较时,它们并不相同或不相等。

我尝试修剪两个字符串。但是结果仍然不相等。

然后我尝试检查字符串长度。

“ A”包含4,而“ B”包含16。

所以这是

字符串“ A”的长度为4,字符串“ B”的长度为16。

怎么可能这样?

所以现在我无法比较它。

请注意。 字符串“ B” 数据是来自数据库的解密数据。但是长度变成了16。

我该如何解决?或将字符串“ B”恢复为正常。

谢谢

编辑:

我把屏幕截图试了看

enter image description here

这是我使用的代码:

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));
    }

1 个答案:

答案 0 :(得分:4)

我的猜测是您误读了一个字节数组,并在字符串末尾以空字符 '\0'结尾。

var pin1 = Input_PIN.text.Trim('\0');
var pin2 = user_account_detail.Pin.Trim('\0');

更新

  

是的。我用('\ 0')修剪,现在可以使用了。但是为什么我   需要修饰('\ 0')吗?

由于Trim()不处理空字符,因此您必须明确指定它们

但是,设计问题是为什么要首先使用它们