CryptographicException: длина данных для расшифровки недопустима с playfabserver - PullRequest
0 голосов
/ 28 июня 2019

Я конвертирую сетку в бинарный Я зашифровал его ключом, Iv и загрузил файл

Я скачал его с playfabserver, расшифровал и затем преобразовал двоичный файл в файл с сеткой

Эта ошибка возникает при расшифровке CryptographicException: длина данных для расшифровки недопустима.

Это потеря от отправки на сервер?

здесь источник шифрования https://www.codeproject.com/Articles/5719/Simple-encrypting-and-decrypting-data-in-C

Конечно, было успешно зашифровать и расшифровать файлы сетки без сервера.

загрузка загружена активна Без затруднений

public void Upload()
    {
        keyName = inputField.text;
        if (!string.IsNullOrEmpty(keyName)&&scirptCamCon.TargetObj1)
        {
            Byte[] by = ReturnMesh();
            Byte[] mIv = Encrpyt.GetIv();
            Byte[] mKey = Encrpyt.GetKey();

            Byte[] Encrtpted = EncDec.Encrypt(by, mIv, mKey);
            PlayFabServerAPI.SetTitleData( new PlayFab.ServerModels.SetTitleDataRequest
            {
                  Key = keyName+"2",
                  Value = Encoding.UTF8.GetString(mKey)
            },
              Onsuccess => { Debug.Log(Encoding.UTF8.GetString(mKey)); },
              Onfail => { Onfail.GenerateErrorReport(); }
            );

            PlayFabServerAPI.SetTitleInternalData(new PlayFab.ServerModels.SetTitleDataRequest
            {
                Key = keyName + "1",
                Value = Encoding.UTF8.GetString(mIv)
            },
              Onsuccess => { Debug.Log(Encoding.UTF8.GetString(mIv)); },
              Onfail => { Onfail.GenerateErrorReport(); }
            );
            UploadFileToCDN(keyName, by);
            inputField.gameObject.SetActive(false);
        }
    }   


    public void UploadFileToCDN(string key, byte[] content, string contentType = "binary/octet-stream")
    {
        GetUploadUrl(key, contentType, presignedUrl =>
        {
           PutFile(presignedUrl, content);
        });
    }

    void GetUploadUrl(string key, string contentType, Action<string> onComplete)
    {
        PlayFabAdminAPI.GetContentUploadUrl(new GetContentUploadUrlRequest()
        {
            ContentType = contentType,
            Key = key
        }, result => onComplete(result.URL),
        error => Debug.LogError(error.GenerateErrorReport()));
    }

    public void PutFile(string putURL, byte[] payload)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(putURL);
        request.Method = "PUT";
        request.ContentType = "binary/octet-stream";

        if (payload != null)
        {
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(payload, 0, payload.Length);
            dataStream.Close();
        }
        else
        {
            Debug.LogWarning(string.Format("ERROR: Byte arrry was empty or null"));
            return;
        }

        Debug.Log("Starting HTTP PUT...");  
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if (response.StatusCode == HttpStatusCode.OK)
        {
            Debug.Log("...HTTP PUT Successful");
        }
        else
        {
            Debug.LogWarning(string.Format("ERROR: [{0}] -- {1}", response.StatusCode, response.StatusDescription));
        }
    }

    public void DownloadFileFromCDN(string key)
    {
        GetDownloadUrl(key, presignedUrl =>
        {
            GetFile(presignedUrl);
        });
    }

    void GetDownloadUrl(string key, Action<string> onComplete)
    {
        if(scirptCamCon.TargetObj1)
        scirptCamCon.TargetObj1.name = key;
        PlayFabClientAPI.GetContentDownloadUrl(new GetContentDownloadUrlRequest()
        {
            Key = key,
            ThruCDN = true 
        }, result => onComplete(result.URL),
        error => Debug.LogError(error.GenerateErrorReport()));
    }

    void GetFile(string preauthorizedUrl)
    {
        StartCoroutine(FileRecevier(preauthorizedUrl));
    }

    IEnumerator FileRecevier(string preauthorizedUrl)
    {
        string keyVale = keyName + "2";
        string ivVale = keyName + "1";
        byte[] thisiv=new byte[16];
        byte[] thiskey= new byte[16];
        UnityWebRequest www = UnityWebRequest.Get(preauthorizedUrl);
        PlayFabServerAPI.GetTitleData(new PlayFab.ServerModels.GetTitleDataRequest(),
       result => {
           if (result.Data == null || !result.Data.ContainsKey(keyVale)) Debug.Log("No key");
           else Debug.Log("KeyValue: " + result.Data[keyVale]);
           thiskey = Encoding.UTF8.GetBytes(result.Data[keyVale]);
       },                   //키값을 출력하는 방법이 result.data[keyname]을 
       error => {
           Debug.Log("Got error getting titleData:");
           Debug.Log(error.GenerateErrorReport());
       }
        );
        PlayFabServerAPI.GetTitleInternalData(new PlayFab.ServerModels.GetTitleDataRequest(),
        result => {
            if (result.Data == null || !result.Data.ContainsKey(ivVale)) Debug.Log("No value");
            else Debug.Log("ivVale: " + result.Data[ivVale]);
            thisiv = Encoding.UTF8.GetBytes(result.Data[ivVale]);
        },
        error => {
            Debug.Log("Got error getting titleData:");
            Debug.Log(error.GenerateErrorReport());
        }
    );
        yield return www.SendWebRequest();
        yield return new WaitForSeconds(2.0f);

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            Debug.Log("SucessfulDownload");
            results = www.downloadHandler.data;
            if (scirptCamCon.TargetObj1)
            {
                Debug.Log(thiskey.Length);
                Debug.Log(thisiv.Length);
                DestroyImmediate(scirptCamCon.TargetObj1.GetComponent<MeshCollider>());
                results = EncDec.Decrypt(results, thiskey, thisiv);
                MeshSerializer.DeserializeMesh(results, scirptCamCon.TargetObj1.GetComponent<MeshFilter>().mesh);
                scirptCamCon.TargetObj1.AddComponent<MeshCollider>();

            }
            else
                Debug.Log("Null obj.");
        }
    }

CryptographicException: длина данных для расшифровки недопустима.

1 Ответ

0 голосов
/ 03 июля 2019

Я использую тот же ключ, тот же IV, те же данные Чудесным результатом является разница оригинала

в файл сервера конвертируется, это очень странно

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