Длина строки не равна строковым данным Unity C # - PullRequest
2 голосов
/ 07 марта 2019

У меня тут странная проблема.У меня есть две строки для сравнения.

Позволяет назвать это:

Строка "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 = "";
            }

        }

И это код decrpyt, который я использую для строки "B":

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 Ответ

4 голосов
/ 07 марта 2019

Полагаю, вы неправильно прочитали массив байтов и получили пустых символов '\0' в конце строки.

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

Обновление

Это верно. Я обрезал ('\ 0'), и теперь это работает. Но почему я нужно вставить ('\ 0') в отделку?

Поскольку Trim() не имеет дело с нулевыми символами, вы должны указать их явно

Однако, проблема дизайна заключается в том, почему они у вас на первом месте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...